通用mapper也是提供了代码生成器,并且提供了两种:专用代码生成器 和 通用代码生成器,本文主要介绍 专用代码生成器。通用 Mapper 专用代码生成器生成的 Model 会在原有基础上增加 @Table,@Id,@Column 等注解,方便自动会数据库字段进行映射。
1. 导入jar包
通用 Mapper 的代码生成器需要配置MyBatis使用,注意包之间的版本依赖关系
<!-- MyBatis代码生成核心包 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<!-- 通用 Mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.2.1</version>
</dependency>
<!-- 使用SpringBoot可以引入starter方便其他地方使用 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>4.2.1</version>
</dependency>
<!-- 如果你只需要用到通用 Mapper 中的插件,可以只引入 mapper-generator -->
<!-- 注意,这个包不需要和上面的 mapper 同时引入,mapper 中包含 generator -->
<!-- 上面是官方原话,但是我在实际测试中,比如生成lombok的注解是需要这个包的,所以建议加上这个,否则通过Java生成代码会失败,通过Maven插件可以生成 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-generator</artifactId>
<version>4.2.1</version>
</dependency>
2. 编写配置文件 generatorConfig.xml
和MyBatis的代码生成器一样是通过配置文件进行配置参数
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 通用mapper 代码生成配置 -->
<generatorConfiguration>
<!--
targetRuntime:
MyBatis3Simple:简单版,只生成mapper接口和映射文件,实体类,不生成mapper相关的方法
MyBatis3:复杂简单版,只生成mapper接口和映射文件,实体类和Example,同时生成mapper相关的方法
-->
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<!-- mapper层继承的接口 -->
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
<!-- 编码格式 -->
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 是否使用mapper生成注释 -->
<property name="useMapperCommentGenerator" value="false"/>
<!-- 生成model时的lombok的注解 -->
<property name="lombok" value="Data"/>
<!-- swagger 注解 -->
<!-- <property name="swagger" value="true"/>-->
<!-- 是否强制生成注解 -->
<property name="forceAnnotation" value="true"/>
<!-- 开始符,用于关键字 -->
<property name="beginningDelimiter" value="`"/>
<!-- 结束符,用于关键字 -->
<property name="endingDelimiter" value="`"/>
<!-- 是否区分大小写 -->
<property name="caseSensitive" value="true"/>
</plugin>
<!-- 配置数据库 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://10.1.8.41:3306/test001"
userId="root"
password="123456">
</jdbcConnection>
<!--
下面的节点需要注意 targetProject 参数值
使用java代码生成时需要加上项目名称,例如:springboot-mybatis-mapper/src/main/java
使用maven插件生成时不需要加项目名称,例如:src/main/java
-->
<!-- 实体类 -->
<javaModelGenerator targetPackage="com.hxz.entity"
targetProject="springboot-mybatis-mapper/src/main/java"/>
<!-- mapper xml -->
<sqlMapGenerator targetPackage="mapper"
targetProject="springboot-mybatis-mapper/src/main/resources"/>
<!-- mapper -->
<javaClientGenerator targetPackage="com.hxz.mapper"
targetProject="springboot-mybatis-mapper/src/main/java"
type="XMLMAPPER"/>
<!-- 需要生成的表 -->
<table tableName="role"/>
<table tableName="user"/>
<!-- 使用%表示生成全部 -->
<!-- <table tableName="%"/>-->
</context>
</generatorConfiguration>
注意:plugin 节点的参数可以按照 tk.mybatis.mapper.generator.MapperPlugin 类的属性进行配置
代码生成器可通过Java代码和Maven插件来生成代码
3. 通过Java代码生成
public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(Resources.getResourceAsStream("generatorConfig.xml"));
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
for (String warning : warnings) {
System.out.println(warning);
}
}
4. 通过Maven插件生成
在pom文件中配置插件
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<configurationFile>
${basedir}/src/main/resources/generatorConfig.xml
</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.2.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
注意:
1.
j
a
r
包
版
本
依
赖
问
,
至
本
文
发
布
日
期
,
上
面
导
入
的
版
本
是
可
以
正
常
使
用
的
\color{red}{1. jar包版本依赖问,至本文发布日期,上面导入的版本是可以正常使用的}
1.jar包版本依赖问,至本文发布日期,上面导入的版本是可以正常使用的
2.
实
体
类
、
m
a
p
e
r
、
x
m
l
生
成
的
配
置
中
,
t
a
r
g
e
t
P
r
o
j
e
c
t
参
数
值
在
使
用
j
a
v
a
代
码
生
成
时
需
要
加
上
项
目
名
称
,
在
使
用
m
a
v
e
n
插
件
生
成
时
不
需
要
加
项
目
名
称
\color{red}{2. 实体类、maper、xml生成的配置中,targetProject 参数值在使用java代码生成时需要加上项目名称,在使用maven插件生成时不需要加项目名称}
2.实体类、maper、xml生成的配置中,targetProject参数值在使用java代码生成时需要加上项目名称,在使用maven插件生成时不需要加项目名称