# MyBatis教程 - 15 逆向工程
什么是逆向工程?
逆向工程就是通过数据库的表,生成对应的 Java 实体类、Mapper接口、 XML 映射文件,这样的话就不用我们再去一个一个手动创建。
下面的操作,是在已经集成了 MyBatis 的环境中完成的,环境准备,参考 HelloWorld (opens new window) 。
这里我再建两种表,用来演示逆向工程:
CREATE TABLE tb_teacher (
id INT NOT NULL AUTO_INCREMENT COMMENT 'ID',
name varchar(64) NOT NULL COMMENT '老师名称',
age tinyint unsigned DEFAULT NULL COMMENT '年龄',
create_time datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='老师表';
CREATE TABLE tb_course (
id INT NOT NULL AUTO_INCREMENT COMMENT 'ID',
name varchar(64) NOT NULL COMMENT '课程名称',
create_time datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='课程表';
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1 添加依赖
在项目的 pom.xml 中添加依赖,需要添加插件依赖:
<?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">
<!-- ...略 -->
<dependencies>
<!-- ...略 -->
</dependencies>
<build>
<plugins>
<!-- 逆向工程,生成mybatis代码插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.2</version>
<!-- 插件的依赖 -->
<dependencies>
<!-- mysql驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<!-- 逆向工程的核心依赖 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.2</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 2 创建逆向工程配置文件
在 src/main/resources
目录下创建 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>
<!--
id: 生成器的唯一标识,自定义
targetRuntime: 指定执行生成的逆向工程的版本
MyBatis3Simple: 生成基本的CRUD,包括增删改查、和查询所有数据的5个方法,简洁版本
MyBatis3: 生成很多的代码,以及基于 Example 对象的复杂查询方法
-->
<context id="myGenerator" targetRuntime="MyBatis3Simple">
<commentGenerator>
<!-- 是否去除自动生成的注释,因为生成的注释是英文的,所以这里不要注释 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 数据库的连接信息,连接到数据库才能生成 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/foooor_db?serverTimezone=UTC&useSSL=false"
userId="root"
password="123456">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- javaBean的生成策略,指定要生成的pojo的位置-->
<javaModelGenerator targetPackage="com.foooor.mybatis.pojo" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/><!-- 去除字段前后的空格 -->
</javaModelGenerator>
<!-- SQL映射文件的生成策略 -->
<sqlMapGenerator targetPackage="com.foooor.mybatis.mapper" targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- Mapper接口的生成策略 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.foooor.mybatis.mapper" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 指定需要逆向工程的表,指定表名和对应的实体类名 -->
<table tableName="tb_teacher" domainObjectName="Teacher" />
<table tableName="tb_course" domainObjectName="Course" />
</context>
</generatorConfiguration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
上面主要指定的了生成的策略。
- 在 win 系统写成
targetProject=".\src\main\resources"
,在 mac 系统写成targetProject="./src/main/resources"
; targetRuntime="MyBatis3Simple"
指定的是使用简单版本的生成策略,生成的接口仅包含 5 个方法,如果使用MyBatis3
生成的方法会很多,主要是会生成 Example 对象,Example 对象是 QBC(Query By Criteria)的查询方式,根据一组条件来动态构建查询语句,举个栗子:
// 根据条件查询
TeacherExample example = new TeacherExample();
// 查询条件或者更新条件
example.createCriteria().andNameEqualTo("王老师").andAgeEqualTo(35);
1
2
3
4
2
3
4
使用 targetRuntime="MyBatis3"
会为每个实体类生成 XxxExample
对象,通过 XxxExample
对象构建查询语句。使用这种方式会生成很多的方法,包含各种条件。
我自己不是很喜欢这种方式,感觉还不如 MyBatis-Plus 方便,如果需要,你可以试试看看。
另外在上面生成的配置文件中,指定了各个表的名称,如果想针对所有的表生成,可以使用 *
指定。
<table tableName="*" />
1
# 3 测试生成
在 pom.xml 中添加完逆向工程的插件,会在 Maven 下的插件中,多出 mybatis-generator
选项,直接双击执行生成即可。
执行完成, 会在对应的包下生成 实体类对象
、Mapper接口
、Mapper
的SQL映射文件。