1. MyBatis的逆向工程详细步骤操作
文章目录
- 1. MyBatis的逆向工程详细步骤操作
- 2. 逆向工程配置与生成
- 2.1 MyBatis3Simple:基础版,只有基本的增删改查
- 2.1.1 第一步:在`pom.xml` 中添加逆向工程插件
- 2.1.2 第二步:配置 generatorConfig.xml
- 2.1.3 第三步:运行插件
- 2.1.4 第四步:测试运行
- 2.2 MyBatis3:生成的是增强版
- 3. 总结:
- 4. 最后:
所谓的逆向工程:会/可以根据数据库表逆向生成Java的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。
思考:使用这个插件的话,需要给这个插件配置哪些信息?
- POJO类名,包名以及要生成的所在位置
- SqlMapper.xml 文件名以及生成位置
- Mapper 接口名以及生成位置
- 连接数据库的信息
- 指定哪些表参与逆向工程
- …
关于 MyBatis 的逆向工程有两个版本: 对应在 targetRuntime 的两个值:
- MyBatis3Simple:生成的是基础版,只有基本的增删改查。
- MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。
2. 逆向工程配置与生成
下面我们进行逆向工程配置,让其为我们自动生成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>
<?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 generatorConfigurationPUBLIC "-//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接口的包名和位置 --><javaClientGeneratortype="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:生成的是基础版,只有基本的增删改查
注意:需要将其中的一些信息修改为你自己的比如(数据库的账号密码,以及你所想的包名的路径名称等等)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//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接口的包名和位置 --><javaClientGeneratortype="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类负责封装查询条件的@Testpublic 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 {@Testpublic 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));// 添加 orcarExample.or().andCarTypeEqualTo("燃油车");// 执行查询List<Car> 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 {@Testpublic 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. 总结:
- 所谓的逆向工程:会/可以根据数据库表逆向生成Java的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。
- 关于 MyBatis 的逆向工程有两个版本:对应在 targetRuntime 的两个值:
1. MyBatis3Simple:生成的是基础版,只有基本的增删改查。 2. MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。
- 注意:MyBatis3 增强版,多出来的这个
CarExample
实体类对象,是封装了条件,通过CarExample 对象来封装查询条件的
4. 最后:
“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”