1. MyBatis的逆向工程详细步骤操纵
@
目次
所谓的逆向工程:会/可以根据数据库表逆向天生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>
-
- <plugin>
-
- <groupId>org.mybatis.generator</groupId>
- <artifactId>mybatis-generator-maven-plugin</artifactId>
- <version>1.4.1</version>
-
- <configuration>
- <overwrite>true</overwrite>
- </configuration>
-
- <dependencies>
-
- <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>
-
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>3.5.10</version>
- </dependency>
-
- <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>
-
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <version>1.2.11</version>
- </dependency>
- </dependencies>
-
- <build>
-
- <plugins>
-
- <plugin>
-
- <groupId>org.mybatis.generator</groupId>
- <artifactId>mybatis-generator-maven-plugin</artifactId>
- <version>1.4.1</version>
-
- <configuration>
- <overwrite>true</overwrite>
- </configuration>
-
- <dependencies>
-
- <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>
-
- <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 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:天生的是底子版,只有基本的增删改查

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

- <?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>
-
- <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 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<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();
- }
- }
复制代码
- 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. 总结:
- 所谓的逆向工程:会/可以根据数据库表逆向天生Java的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。
- 关于 MyBatis 的逆向工程有两个版本:对应在 targetRuntime 的两个值:
- 1. MyBatis3Simple:生成的是基础版,只有基本的增删改查。
- 2. MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。
复制代码
- 注意:MyBatis3 增强版,多出来的这个 CarExample 实体类对象,是封装了条件,通过CarExample 对象来封装查询条件的
4. 最后:
“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和复兴是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时候再次相遇。”
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |