MyBatis Generator (MBG)是MyBatis MyBatis的代码生成器,它将为MyBatis的所有版本生成代码。MyBatis Generator 有多种方式生成,这里使用Java。
添加依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<scope>runtime</scope>
</dependency>
generatorConfig.xml
MyBatis Generator 的配置文件,context下子元素要按照一定顺序
<?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.properties"/>
<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 为模型生成序列化方法-->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<!-- 为生成的Java模型创建一个toString方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!--自定义生成model的注释-->
<commentGenerator type="com.shpun.CommentGenerator">
<!--不生成注释-->
<property name="suppressAllComments" value="true"/>
<!--不生成时间戳-->
<property name="suppressDate" value="true"/>
<!--生成的注释中包括来自数据库的表和列注释-->
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!--配置数据库连接-->
<jdbcConnection driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.connectionURL}"
userId="${jdbc.userId}"
password="${jdbc.password}">
</jdbcConnection>
<!--指定生成model的路径-->
<javaModelGenerator targetPackage="com.shpun.model" targetProject="src\main\java" />
<!--指定生成mapper.xml的路径-->
<sqlMapGenerator targetPackage="mapper" targetProject="src\main\resources"/>
<!--指定生成mapper接口的的路径-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.shpun.mapper" targetProject="src\main\java" />
<!--全部表tableName设为%-->
<table tableName="%"
enableSelectByExample="false"
enableDeleteByExample="false"
enableCountByExample="false"
enableUpdateByExample="false"
selectByExampleQueryId="false"
>
</table>
</context>
</generatorConfiguration>
generator.properties
数据库配置
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/rbac0?useUnicode=true&characterEncoding=UTF-8&useSSL=false
jdbc.userId=root
jdbc.password=root
CommentGenerator
Model类中成员变量的注释生成器,获取数据库中的注释添加到成员变量的上方;也可添加Swagger的注解 @ApiModelProperty
public class CommentGenerator extends DefaultCommentGenerator {
/**
* 是否生成的注释中包括来自数据库的表和列注释
*/
private boolean addRemarkComments = false;
/**
* 设置配置的参数
*/
@Override
public void addConfigurationProperties(Properties properties) {
super.addConfigurationProperties(properties);
this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
}
/**
* 给字段添加注释
*/
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
String remarks = introspectedColumn.getRemarks();
// 根据参数和备注信息判断是否添加备注信息
if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
addComment(field, remarks);
// addApiModelProperty(field,remarks);
}
}
/**
* 给model的字段添加注释
*/
private void addComment(Field field, String remarks) {
field.addJavaDocLine("/**");
// 获取数据库字段的备注信息
String[] remarkLines = remarks.split(System.getProperty("line.separator"));
for (String remarkLine : remarkLines) {
field.addJavaDocLine(" * " + remarkLine);
}
field.addJavaDocLine(" */");
}
/**
* 给model类添加swagger注解
* @param field
* @param remarks
*/
private void addApiModelProperty(Field field, String remarks){
if(remarks.contains("\"")){
remarks = remarks.replace("\"","'");
}
field.addJavaDocLine("@ApiModelProperty(\""+remarks+"\")");
}
}
生成器
public class Generator {
public static void main(String[] args) {
// 执行过程中的警告信息
List<String> warnings = new ArrayList<>();
// 当生成的代码重复时,覆盖原代码
boolean overwrite = true;
try (
InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
){
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(is);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
// 执行生成代码
myBatisGenerator.generate(null);
}catch (Exception e) {
e.printStackTrace();
}
// 输出警告信息
for (String warning : warnings) {
System.out.println(warning);
}
}
}
项目结构
生成前
运行 Generator,生成后
生成的Model类
参考:
MyBatis Generator 文档
MyBatis Generator 文档 - Running MyBatis Generator With Java
MyBatis Generator 文档 - 配置文件参数
mall整合SpringBoot+MyBatis搭建基本骨架
mall整合Swagger-UI实现在线API文档
Mybatis-generator自动生成器
使用MyBatis Generator逆向工程报错:元素类型为 “context” 的内容必须匹配