Springboot(五)集成mybatis-generator自动生成代码插件

Springboot(五)集成mybatis-generator自动生成代码插件

五月 28, 2019

MyBatis Generator介绍

MyBatis Generator,缩写MBG,是一个Mybatis和iBatis的代码生成器。它支持Mybatis的所有版本,支持iBatis 2.2.0以后的版本。通过MyBatis Generator可以根据数据库表生成相应的实体、sql映射文件、Dao等,能应付简单的CRUD(Create, Retrieve, Update, Delete),对于连接查询或存储过程等还是要手动编写sql和对象。

MyBatis Generator将生成以下内容:

  • 与表结构匹配的Java POJO。这可能包括:
    • 一个关于表主键的类(如果表有主键)
    • 一个关于表非主键字段的类(BLOB字段除外)
    • 一个包含表BLOB字段的类(如果表有BLOB字段)
    • 一个支持动态查询、修改和删除的类
  • MyBatis或iBATIS兼容的SQL映射XML文件。MBG为配置中指定的每个表的简单CRUD函数生成SQL,生成的SQL语句包括:
    • 插入
    • 通过主键更新
    • 通过动态where子句更新
    • 通过主键删除
    • 通过动态where子句删除
    • 通过主键查询
    • 通过动态where子句查询
    • 通过动态where子句查询条数

注意:上面的内容并不一定全部生成,比如:如果表没有主键,则不会生成通过主键删除等sql。

  • 适合使用上述对象的Java类,Java类的生成是可选的。MBG将为MyBatis 3.X生成以下类型的Java类:
    • 与MyBatis 3.x映射器基础结构配合使用的映射器接口
      MBG将为iBATIS 2.x生成以下类型的Java类:
    • 符合Spring框架的DAO
    • 只使用iBATIS SQL映射API的DAO。这些DAO可以通过两种方式生成:通过构造函数或setter注入来提供SqlMapClient。
    • 符合iBATIS DAO框架的DAO(这是iBATIS的一个可选部分,此框架已被弃用,所以建议改用Spring框架)

在迭代开发过程中使用MyBatis Generator的注意事项:

  1. 如果存在与新生成的XML文件具有相同名称的现有文件,MBG将自动合并XML文件,合并时,MBG不会覆盖你在XML文件中添加的任何内容。你可以重复生成而不用担心丢失XML文件中你添加的内容,MBG只替换通过MBG生成的任何XML元素。
  2. MBG不会合并Java文件,它可以覆盖现有文件或使用不同的唯一名称保存新生成的文件(文件名后加1、2、3等序号)。如果重复生成可以选择自动覆盖替换或手动合并更改。

在pom.xml里添加依赖:

参考文献:
SpringBoot框架之通用mapper插件(tk.mybatis)
Druid的概念

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
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
</dependency>
<!--通用Mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
</dependency>
<!-- Druid 数据连接池依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>

文件生成方式有两种,一种通过main方法,一种通过maven插件,这次我们直接通过插件生成,在pom文件下添加依赖插件(所有版本号需要自己设置)

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
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>${mybatis.generator}</version>
<configuration>
<!--generator的配置xml目录-->
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml
</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>${mybatis.generator}</version>
</dependency>
<!--通用Mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>${tk.mybatis.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>

然后创建项目结构


看一下我们插件下引用的generator配置

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
52
53
54
55
<?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>
<properties resource="generator/generator.properties"/>

<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="mergeable" value="false"></property>
<plugin type="${mapper.plugin}">
<property name="mappers" value="${mapper.Mapper}"/>
<!-- caseSensitive默认false,当数据库表名区分大小写时,可以将该属性设置为true -->
<property name="caseSensitive" value="true"/>
</plugin>
<commentGenerator>
<property name="suppressDate" value="true"/>
</commentGenerator>

<jdbcConnection driverClass="${generator.driver-class-name}"
connectionURL="${generator.url}"
userId="${generator.username}"
password="${generator.password}">
</jdbcConnection>
<!--<javaTypeResolver type="com.company1075.generator.MyJavaTypeResolverDefaultImpl">-->
<!--<property name="forceBigDecimals" value="false"></property>-->
<!--</javaTypeResolver>-->

<!--对应model模型-->
<javaModelGenerator targetPackage="${targetPackage.model}"
targetProject="${project.model}" >
<property name="trimStrings" value="true"/>
<property name="enableSubPackages" value="true"/>
</javaModelGenerator>
<!--对应的mapper.xml文件 -->
<sqlMapGenerator targetPackage="${targetPackage.xml}"
targetProject="${project.xml}" >
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--对应的mapper文件 -->
<javaClientGenerator targetPackage="${targetPackage.mapper}"
targetProject="${project.mapper}" type="XMLMAPPER" >
<property name="enableSubPackages" value="true" />
</javaClientGenerator>

<table schema="" tableName="users" domainObjectName="User">
<!--<property name="useActualColumnNames" value="true"/>-->
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
<!--<ignoreColumn column="gmt_create"/>-->
<!--<ignoreColumn column="gmt_modified"/>-->
</table>
</context>
</generatorConfiguration>

generator.properties下的属性配置,对应项目的model、mapper

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#导出数据库的地址
generator.url: jdbc:mysql://192.168.1.69:3306/test?useUnicode=true&characterEncoding=utf8
generator.username: sa
generator.password: some_pass
generator.driver-class-name: com.mysql.jdbc.Driver

#tkmybatis插件的引用
mapper.plugin = tk.mybatis.mapper.generator.MapperPlugin
mapper.Mapper = com.cxy.test.generator.config.tkmapper.MyMapper

#配置对应生成文件的地址
targetPackage.model = com.cxy.test.generator.model
project.model = src/main/java
targetPackage.mapper =com.cxy.test.generator.mapper
project.mapper = src/main/java
targetPackage.xml = mybatis
project.xml = src/main/resources

为了减少代码,使用方便,我们这使用的是tk.mybatis的mapper

1
mapper.Mapper = com.cxy.test.generator.config.tkmapper.MyMapper

1
2
3
import tk.mybatis.mapper.common.BaseMapper;
public interface MyMapper<T> extends BaseMapper<T> {
}

配置完成使用插件生成代码



再来回头看下我们的目录结构

其他配置参照application.yml

启动应用


示例代码-github