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

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

@


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

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

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

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

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

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

2. 逆向工程配置与生成

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

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

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

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

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

<!--定制构建过程--> <build>   <!--可配置多个插件-->   <plugins>     <!--其中的一个插件:mybatis逆向工程插件-->     <plugin>       <!--插件的GAV坐标-->       <groupId>org.mybatis.generator</groupId>       <artifactId>mybatis-generator-maven-plugin</artifactId>       <version>1.4.1</version>       <!--允许覆盖-->       <configuration>         <overwrite>true</overwrite>       </configuration>       <!--插件的依赖-->       <dependencies>         <!--mysql驱动依赖-->         <dependency>           <groupId>mysql</groupId>           <artifactId>mysql-connector-java</artifactId>           <version>8.0.30</version>         </dependency>       </dependencies>     </plugin>   </plugins> </build> 

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

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

<?xml version="1.0" encoding="UTF-8"?> <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.0</modelVersion>      <groupId>com.rainbowsea</groupId>     <artifactId>mybatis-012-generator2</artifactId>     <version>1.0-SNAPSHOT</version>      <properties>         <maven.compiler.source>17</maven.compiler.source>         <maven.compiler.target>17</maven.compiler.target>     </properties>      <dependencies>         <!--        mybatis 的依赖-->         <dependency>             <groupId>org.mybatis</groupId>             <artifactId>mybatis</artifactId>             <version>3.5.10</version>         </dependency>          <!--        mysql -->         <dependency>             <groupId>mysql</groupId>             <artifactId>mysql-connector-java</artifactId>             <version>8.0.30</version>         </dependency>          <dependency>             <groupId>junit</groupId>             <artifactId>junit</artifactId>             <version>4.13.2</version>             <scope>test</scope>         </dependency>          <!--        引入 logback的依赖,这个日志框架实现了slf4j 规范-->         <dependency>             <groupId>ch.qos.logback</groupId>             <artifactId>logback-classic</artifactId>             <version>1.2.11</version>         </dependency>     </dependencies>      <!--定制构建过程-->     <build>         <!--可配置多个插件-->         <plugins>             <!--其中的一个插件:mybatis逆向工程插件-->             <plugin>                 <!--插件的GAV坐标-->                 <groupId>org.mybatis.generator</groupId>                 <artifactId>mybatis-generator-maven-plugin</artifactId>                 <version>1.4.1</version>                 <!--允许覆盖-->                 <configuration>                     <overwrite>true</overwrite>                 </configuration>                 <!--插件的依赖-->                 <dependencies>                     <!--mysql驱动依赖-->                     <dependency>                         <groupId>mysql</groupId>                         <artifactId>mysql-connector-java</artifactId>                         <version>8.0.30</version>                     </dependency>                 </dependencies>             </plugin>         </plugins>     </build>   </project> 

2.1.2 第二步:配置 generatorConfig.xml

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

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration         PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  <generatorConfiguration>     <!--         targetRuntime有两个值:             MyBatis3Simple:生成的是基础版,只有基本的增删改查。             MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。     -->     <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>          <!-- 生成pojo包名和位置 -->         <javaModelGenerator targetPackage="com.powernode.mybatis.pojo" targetProject="src/main/java">             <!--是否开启子包-->             <property name="enableSubPackages" value="true"/>             <!--是否去除字段名的前后空白-->             <property name="trimStrings" value="true"/>         </javaModelGenerator>          <!-- 生成SQL映射文件的包名和位置 -->         <sqlMapGenerator targetPackage="com.powernode.mybatis.mapper" targetProject="src/main/resources">             <!--是否开启子包-->             <property name="enableSubPackages" value="true"/>         </sqlMapGenerator>          <!-- 生成Mapper接口的包名和位置 -->         <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> 

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

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

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

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

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

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration         PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  <generatorConfiguration>     <!--         targetRuntime有两个值:             MyBatis3Simple:生成的是基础版,只有基本的增删改查。             MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。     -->     <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>          <!-- 生成pojo包名和位置 -->         <javaModelGenerator targetPackage="com.rainbowsea.mybatis.pojo" targetProject="src/main/java">             <!--是否开启子包-->             <property name="enableSubPackages" value="true"/>             <!--是否去除字段名的前后空白-->             <property name="trimStrings" value="true"/>         </javaModelGenerator>          <!-- 生成SQL映射文件的包名和位置 -->         <sqlMapGenerator targetPackage="com.rainbowsea.mybatis.mapper" targetProject="src/main/resources">             <!--是否开启子包-->             <property name="enableSubPackages" value="true"/>         </sqlMapGenerator>          <!-- 生成Mapper接口的包名和位置 -->         <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 第三步:运行插件

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

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

我们可以打开项目看看。

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

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

2.1.4 第四步:测试运行

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

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

编写测试程序:

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

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

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 的操作是一样的。

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

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

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

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

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

如下运行测试:

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

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<Car> 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<Car> cars2 = mapper.selectByExample(carExample);         cars2.forEach(car2->{             System.out.println(car2);         });           sqlSession.close();      } }  

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

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<Car> 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. 最后:

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

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

发表评论

评论已关闭。

相关文章