Mybatis-Generator使用

简介

在学习公司项目时看到公司有使用Mybatis-Generator,所以学习了一下

之前是有见识过Mybatis-Plusgenerator,使用起来还是很棒的,再说了Mybatis-Plus不也是基于Mybatis做的吗,所以相信他们会很相似

再有就是学习项目时用过renren-generator,他能生成项目中简单的业务代码,包括controller、service等等

内容

关于Mybatis-Generator最好还是去官网学习,http://mybatis.org/generator/index.html

当然有些博客写的也很棒,https://www.cnblogs.com/throwable/p/12046848.html

关于上面的那篇博客我只纠正一点,就是关于commentGenerator标签这块suppressAllComments,默认值是false没错,但是false含义是生成注释,设置为true才表示不生成注解。

代码

下面是我的一些代码,可以参考一下

主要是pom.xmlgeneratorConfig.xmlgeneratorConfig.properties

pom.xml

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?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.wnh</groupId>
<artifactId>mybatis-generator</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring.boot.version>2.2.2.RELEASE</spring.boot.version>
<mysql.driver.version>8.0.17</mysql.driver.version>
<mybatis.generator.version>1.4.0</mybatis.generator.version>
<lombok.version>1.18.12</lombok.version>
</properties>

<dependencies>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.driver.version}</version>
</dependency>

<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>${mybatis.generator.version}</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${spring.boot.version}</version>
<scope>test</scope>
</dependency>

</dependencies>

<build>

<plugins>
<!-- 通过mvn mybatis-generator:generate命令,运行mybatis-generator -->
<!-- 参考:https://mybatis.org/generator/running/runningWithMaven.html -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>${mybatis.generator.version}</version>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>

<!-- 定义配置文件 -->
<configurationFile>${basedir}/src/main/resources/mybatis/generatorConfig.xml</configurationFile>
<!-- 输出详细信息 -->
<verbose>true</verbose>
<!-- 覆盖生成文件 -->
<overwrite>true</overwrite>
<!-- 这里许多配置可以放在对应的xml文件中 -->

</configuration>

<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.driver.version}</version>
</dependency>

</dependencies>
</plugin>


</plugins>

</build>


</project>

generatorConfig.properties

1
2
3
4
datasource.driver=com.mysql.cj.jdbc.Driver
datasource.url=jdbc:mysql://localhost:3306/operation?useSSL=false
datasource.username=root
datasource.password=root

generatorConfig.xml

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?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="mybatis/generatorConfig.properties"/>

<!-- 要添加到类路径的 JAR/ZIP 文件的完整路径名,或要添加到类路径的目录 -->
<!-- 需要驱动:1、加入驱动路径 2、在plugin里直接加入依赖 -->
<!-- <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip"/>-->

<!-- targetRuntime属性推荐MyBatis3和MyBatis3Simple -->
<!-- 必须按context的顺序配置 -->
<context id="MySQL" targetRuntime="MyBatis3Simple">

<!-- 插件扩展生成类,例如:生成toString,实现java.io.Serializable等 -->
<!-- http://mybatis.org/generator/reference/plugins.html https://github.com/itfsw/mybatis-generator-plugin -->
<!-- <plugin type="com.itfsw.mybatis.generator.plugins.LombokPlugin">-->
<!-- &lt;!&ndash; @Data 默认开启,同时插件会对子类自动附加@EqualsAndHashCode(callSuper = true),@ToString(callSuper = true) &ndash;&gt;-->
<!-- <property name="@Data" value="true"/>-->
<!-- &lt;!&ndash; @Builder 必须在 Lombok 版本 >= 1.18.2 的情况下开启,对存在继承关系的类自动替换成@SuperBuilder &ndash;&gt;-->
<!-- <property name="@Builder" value="false"/>-->
<!-- &lt;!&ndash; @NoArgsConstructor 和 @AllArgsConstructor 使用规则和Lombok一致 &ndash;&gt;-->
<!-- <property name="@AllArgsConstructor" value="false"/>-->
<!-- <property name="@NoArgsConstructor" value="false"/>-->
<!-- &lt;!&ndash; @Getter、@Setter、@Accessors 等使用规则参见官方文档 &ndash;&gt;-->
<!-- <property name="@Accessors(chain = true)" value="false"/>-->
<!-- &lt;!&ndash; 临时解决IDEA工具对@SuperBuilder的不支持问题,开启后(默认未开启)插件在遇到@SuperBuilder注解时会调用ModelBuilderPlugin来生成相应的builder代码 &ndash;&gt;-->
<!-- <property name="supportSuperBuilderForIdea" value="false"/>-->
<!-- </plugin>-->

<!--覆盖生成XML文件-->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />



<commentGenerator>
<property name="suppressAllComments" value="true"/>
<!-- 是否输出表和列的comment信息 -->
<property name="addRemarkComments" value="true"/>
</commentGenerator>

<!-- 数据源连接信息 -->
<jdbcConnection
driverClass="${datasource.driver}"
connectionURL="${datasource.url}"
userId="${datasource.username}"
password="${datasource.password}">
</jdbcConnection>

<javaTypeResolver>
<!-- 如果为true,所有数字属性被强制使用BigDecimal类型表示 -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>

<!-- 生成模型的包名和位置 -->
<javaModelGenerator
targetPackage="com.wnh.pojo.model"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaModelGenerator>

<!-- 生成的映射文件包名和位置 -->
<sqlMapGenerator
targetPackage="mybatis/mapper"
targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>

<!-- 生成DAO的包名和位置 -->
<javaClientGenerator
targetPackage="com.wnh.mapper"
targetProject="src/main/java"
type="XMLMAPPER">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>


<!-- <table tableName="school_area"-->
<!-- domainObjectName="SchoolArea"-->
<!-- enableCountByExample="false"-->
<!-- enableSelectByExample="false"-->
<!-- enableUpdateByExample="false"-->
<!-- enableDeleteByExample="false">-->
<!-- <generatedKey column="id" sqlStatement="JDBC" identity="true"/>-->
<!-- </table>-->

<table tableName="user"
domainObjectName="user.User"
mapperName="user.UserMapper"
enableCountByExample="false"
enableSelectByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false">
<generatedKey column="id" sqlStatement="JDBC" identity="true"/>
</table>

</context>
</generatorConfiguration>

注意事项

  • 虽然有Javamaven两种启动方式,但我还是推荐maven
  • 关于pom,要在plugin中引入需要的依赖,上面也提到了可以配置插件帮助我们生成代码,但官方提供的插件都太基础了,不太实用
  • 关于generatorConfig.xml,这里context标签里的要严格按照顺序配置,否则报错
  • 一定注意上面的覆盖xmlplugin配置,不然在覆盖生成时会有问题

吐槽

  • 首先就是关于注释的,Mybatis-Generator生成注释配置下,会生成很多多余的注解,其主要就是关于声明这里的代码是我们Mybatis-Generator生成的,但真的没什么用啊。有人就问了,“你不会把它关掉吗?”我要不是为了生成实体类对应数据库的注释我也不会开
  • 关于生成表这块,难道没有直接配置多个表的选项吗?非得对应数据库每个表写一个table标签吗?
  • 还有就是在生成文件时,它不会自己确定父包,也就是还得配置每个文件的父包,很麻烦

总结

说实话Mybatis-Generator确实能帮助我们简化开发,生成数据库实体类、mapper接口和xml,但是确实也存在一些问题,这也可能是因为它不更新了吧,上maven仓库就可以看到最新版本就是1.4.0,停留在2019年,现在确实也存在很多能替代它的方案。