• MyBatis的逆向工程详细步骤操作


    1. MyBatis的逆向工程详细步骤操作

    @


    所谓的逆向工程:会/可以根据数据库表逆向生成Java的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。

    思考:使用这个插件的话,需要给这个插件配置哪些信息?

    • POJO类名,包名以及要生成的所在位置
    • SqlMapper.xml 文件名以及生成位置
    • Mapper 接口名以及生成位置
    • 连接数据库的信息
    • 指定哪些表参与逆向工程
    • ......

    关于 MyBatis 的逆向工程有两个版本: 对应在 targetRuntime 的两个值:

    1. MyBatis3Simple:生成的是基础版,只有基本的增删改查。
    2. MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。

    在这里插入图片描述

    2. 逆向工程配置与生成

    在这里插入图片描述

    下面我们进行逆向工程配置,让其为我们自动生成va的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。

    2.1 MyBatis3Simple:基础版,只有基本的增删改查

    2.1.1 第一步:在pom.xml 中添加逆向工程插件

    大家直接复制就好了,不用修改的。

    
    <build>
      
      <plugins>
        
        <plugin>
          
          <groupId>org.mybatis.generatorgroupId>
          <artifactId>mybatis-generator-maven-pluginartifactId>
          <version>1.4.1version>
          
          <configuration>
            <overwrite>trueoverwrite>
          configuration>
          
          <dependencies>
            
            <dependency>
              <groupId>mysqlgroupId>
              <artifactId>mysql-connector-javaartifactId>
              <version>8.0.30version>
            dependency>
          dependencies>
        plugin>
      plugins>
    build>
    

    在这里插入图片描述

    在这里插入图片描述

    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
    
        <groupId>com.rainbowseagroupId>
        <artifactId>mybatis-012-generator2artifactId>
        <version>1.0-SNAPSHOTversion>
    
        <properties>
            <maven.compiler.source>17maven.compiler.source>
            <maven.compiler.target>17maven.compiler.target>
        properties>
    
        <dependencies>
            
            <dependency>
                <groupId>org.mybatisgroupId>
                <artifactId>mybatisartifactId>
                <version>3.5.10version>
            dependency>
    
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>8.0.30version>
            dependency>
    
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.13.2version>
                <scope>testscope>
            dependency>
    
            
            <dependency>
                <groupId>ch.qos.logbackgroupId>
                <artifactId>logback-classicartifactId>
                <version>1.2.11version>
            dependency>
        dependencies>
    
        
        <build>
            
            <plugins>
                
                <plugin>
                    
                    <groupId>org.mybatis.generatorgroupId>
                    <artifactId>mybatis-generator-maven-pluginartifactId>
                    <version>1.4.1version>
                    
                    <configuration>
                        <overwrite>trueoverwrite>
                    configuration>
                    
                    <dependencies>
                        
                        <dependency>
                            <groupId>mysqlgroupId>
                            <artifactId>mysql-connector-javaartifactId>
                            <version>8.0.30version>
                        dependency>
                    dependencies>
                plugin>
            plugins>
        build>
    
    
    project>
    

    2.1.2 第二步:配置 generatorConfig.xml

    注意:该文件必须配置到类的根路径下,并且该文件名必须是为 generatorConfig.xml 不可以是其它的。

    
    generatorConfiguration
            PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
            "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    
    <generatorConfiguration>
        
        <context id="DB2Tables" targetRuntime="MyBatis3Simple">
            
            <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
          
            <commentGenerator>
                
                <property name="suppressDate" value="true"/>
                
                <property name="suppressAllComments" value="true"/>
            commentGenerator>
    
            
            <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/powernode"
                            userId="root"
                            password="root">
            jdbcConnection>
    
            
            <javaModelGenerator targetPackage="com.powernode.mybatis.pojo" targetProject="src/main/java">
                
                <property name="enableSubPackages" value="true"/>
                
                <property name="trimStrings" value="true"/>
            javaModelGenerator>
    
            
            <sqlMapGenerator targetPackage="com.powernode.mybatis.mapper" targetProject="src/main/resources">
                
                <property name="enableSubPackages" value="true"/>
            sqlMapGenerator>
    
            
            <javaClientGenerator
                    type="xmlMapper"
                    targetPackage="com.powernode.mybatis.mapper"
                    targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
            javaClientGenerator>
    
            
            <table tableName="t_car" domainObjectName="Car"/>
    
        context>
    generatorConfiguration>
    

    在这里插入图片描述

    下面,我们先使用 MyBatis3Simple:生成的是基础版,只有基本的增删改查

    在这里插入图片描述

    注意:需要将其中的一些信息修改为你自己的比如(数据库的账号密码,以及你所想的包名的路径名称等等)

    在这里插入图片描述

    
    generatorConfiguration
            PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
            "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    
    <generatorConfiguration>
        
        <context id="DB2Tables" targetRuntime="MyBatis3Simple">
            
            <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
    
            <commentGenerator>
                
                <property name="suppressDate" value="true"/>
                
                <property name="suppressAllComments" value="true"/>
            commentGenerator>
    
            
            <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/powernode"
                            userId="root"
                            password="MySQL123">
            jdbcConnection>
    
            
            <javaModelGenerator targetPackage="com.rainbowsea.mybatis.pojo" targetProject="src/main/java">
                
                <property name="enableSubPackages" value="true"/>
                
                <property name="trimStrings" value="true"/>
            javaModelGenerator>
    
            
            <sqlMapGenerator targetPackage="com.rainbowsea.mybatis.mapper" targetProject="src/main/resources">
                
                <property name="enableSubPackages" value="true"/>
            sqlMapGenerator>
    
            
            <javaClientGenerator
                    type="xmlMapper"
                    targetPackage="com.rainbowsea.mybatis.mapper"
                    targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
            javaClientGenerator>
    
            
            <table tableName="t_car" domainObjectName="Car"/>
    
        context>
    generatorConfiguration>
    

    2.1.3 第三步:运行插件

    在这里插入图片描述

    在这里插入图片描述

    我们可以打开项目看看。

    在这里插入图片描述

    在这里插入图片描述

    2.1.4 第四步:测试运行

    别忘记了,运行MyBatis 还是需要导入关于 MyBatis 的相关依赖的 jar 包的

    • 依赖:mybatis依赖、mysql驱动依赖、junit依赖、logback依赖
    • jdbc.properties
    • mybatis-config.xml
    • logback.xml

    编写测试程序:

    在这里插入图片描述

    在这里插入图片描述

    package com.rainbowsea.mybatis.test;
    
    import com.rainbowsea.mybatis.mapper.CarMapper;
    import com.rainbowsea.mybatis.pojo.Car;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import java.io.IOException;
    
    public class CarMapperTest {
    
    
        // CarExample类负责封装查询条件的
        @Test
        public void testSelect() throws IOException {
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");
            SqlSession sqlSession = sqlSessionFactory.openSession();
            CarMapper mapper = sqlSession.getMapper(CarMapper.class);
    
            // 执行查询
            // 1. 查询一个
            Car car = mapper.selectByPrimaryKey(118L);
            System.out.println(car);
    
            sqlSession.close();
        }
    }
    
    

    2.2 MyBatis3:生成的是增强版

    升级为 MyBatis3 增强版,只需要在 generatorConfig.xml 配置文件当中的targetRuntime="MyBatis3" 的值,设置为:myBatis3 即可。其它的和上面 MyBatis3Simple 的操作是一样的。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    注意:MyBatis3 增强版,多出来的这个 CarExample 实体类对象,是封装了条件,通过CarExample 对象来封装查询条件的

    如下运行测试:

    在这里插入图片描述

    package com.rainbowsea.mybatis.test;
    
    import com.rainbowsea.mybatis.mapper.CarMapper;
    import com.rainbowsea.mybatis.pojo.Car;
    import com.rainbowsea.mybatis.pojo.CarExample;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.math.BigDecimal;
    import java.util.List;
    
    public class CarMapperTest {
        @Test
        public void testDeleteByPrimaryKey() throws IOException {
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");
            SqlSession sqlSession = sqlSessionFactory.openSession();
            CarMapper mapper = sqlSession.getMapper(CarMapper.class);
            // 执行查询
            // 1. 查询一个
            Car car = mapper.selectByPrimaryKey(118L);
            System.out.println(car);
    
            // 2. 查询所有(selectByExample 根据条件查询,如果条件是null表示没有条件)
            List cars = mapper.selectByExample(null);
            cars.forEach(car1 -> {
                System.out.println(car1);
            });
    
            // 3. 按照条件进行查询
            // 封装条件,通过CarExample 对象来封装查询条件
            CarExample carExample = new CarExample();
            // 调用carExample.createCriteria()方法来创建查询条件
            carExample.createCriteria()
                    .andBrandLike("小米")
                    .andGuidePriceGreaterThan(new BigDecimal(30.0));
            // 添加 or
            carExample.or().andCarTypeEqualTo("燃油车");
    
            // 执行查询
            List cars2 = mapper.selectByExample(carExample);
            cars2.forEach(car2->{
                System.out.println(car2);
            });
    
    
            sqlSession.close();
    
        }
    }
    
    

    在这里插入图片描述

    package com.powernode.mybatis.test;
    
    import com.powernode.mybatis.mapper.CarMapper;
    import com.powernode.mybatis.pojo.Car;
    import com.powernode.mybatis.pojo.CarExample;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import java.math.BigDecimal;
    import java.util.List;
    
    public class GeneratorTest {
        @Test
        public void testGenerator() throws Exception{
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
            SqlSession sqlSession = sqlSessionFactory.openSession();
            CarMapper mapper = sqlSession.getMapper(CarMapper.class);
            // 增
            /*Car car = new Car();
            car.setCarNum("1111");
            car.setBrand("比亚迪唐");
            car.setGuidePrice(new BigDecimal(30.0));
            car.setProduceTime("2010-10-12");
            car.setCarType("燃油车");
            int count = mapper.insert(car);
            System.out.println("插入了几条记录:" + count);*/
            // 删
            /*int count = mapper.deleteByPrimaryKey(83L);
            System.out.println("删除了几条记录:" + count);*/
            // 改
            // 根据主键修改
            /*Car car = new Car();
            car.setId(89L);
            car.setGuidePrice(new BigDecimal(20.0));
            car.setCarType("新能源");
            int count = mapper.updateByPrimaryKey(car);
            System.out.println("更新了几条记录:" + count);*/
            // 根据主键选择性修改
            /*car = new Car();
            car.setId(89L);
            car.setCarNum("3333");
            car.setBrand("宝马520Li");
            car.setProduceTime("1999-01-10");
            count = mapper.updateByPrimaryKeySelective(car);
            System.out.println("更新了几条记录:" + count);*/
    
            // 查一个
            Car car = mapper.selectByPrimaryKey(89L);
            System.out.println(car);
            // 查所有
            List cars = mapper.selectByExample(null);
            cars.forEach(c -> System.out.println(c));
            // 多条件查询
            // QBC 风格:Query By Criteria 一种查询方式,比较面向对象,看不到sql语句。
            CarExample carExample = new CarExample();
            carExample.createCriteria()
                    .andBrandEqualTo("丰田霸道")
                    .andGuidePriceGreaterThan(new BigDecimal(60.0));
            carExample.or().andProduceTimeBetween("2000-10-11", "2022-10-11");
    
            mapper.selectByExample(carExample);
            sqlSession.commit();
        }
    }
    
    

    3. 总结:

    1. 所谓的逆向工程:会/可以根据数据库表逆向生成Java的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。
    2. 关于 MyBatis 的逆向工程有两个版本:对应在 targetRuntime 的两个值:
    1.  MyBatis3Simple:生成的是基础版,只有基本的增删改查。
    2.  MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。
    
    1. 注意:MyBatis3 增强版,多出来的这个 CarExample 实体类对象,是封装了条件,通过CarExample 对象来封装查询条件的

    4. 最后:

    “在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

    在这里插入图片描述

  • 相关阅读:
    4、FFmpeg命令行操作3
    真无线耳机哪个好?真无线耳机性价比排行榜
    程序员疯抢的 Java 面试宝典(PDF 版)限时开源,别把大厂想的那么难,关键是你准备得如何
    锐捷——Telent登录时使用 用户名及密码登陆路由器
    智荟雄安,创想未来 | 竹云董事长受邀出席雄安新区2023软件和信息技术服务业创新发展论坛并作主题演讲
    前端面试题之——兼容篇
    x shell 用作串口调试助手
    (附源码)app智能手机的微课程学习系统 毕业设计 100909
    【Flink源码】JobManager源码之启动WebMonitorEndpoint
    《Mycat分布式数据库架构》之故障切换
  • 原文地址:https://www.cnblogs.com/TheMagicalRainbowSea/p/18249285