为了让mybatis generator生成的代码更符合自己企业的需求,可以通过以下方式,扩展mybatis generator
例子包含扩展功能:
生成通用扩展Dao文件(包含java文件和xml文件),对自定义sql和默认sql的统一操作;
去除无用的注释,按照列备注显示到实体字段注释;
自定义Jdbc类型到java类型映射;
使用Lombok代替getter、Setter
Github 源码:查看
本文中的扩展主要以打jar包方式引入到mybatis generator 插件中,扩展、插件的编写都在extend项目中进行。
项目结构如下,创建自己需要的包,如comment、plugin、resolver
pom.xml 加入打包插件,引入mybatis-generator核心依赖
<dependencies>
<dependency>
<groupId>org.mybatis.generatorgroupId>
<artifactId>mybatis-generator-coreartifactId>
<version>1.3.5version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-assembly-pluginartifactId>
<version>2.5.5version>
<configuration>
<archive>
<manifest>
manifest>
archive>
<descriptorRefs>
<descriptorRef>jar-with-dependenciesdescriptorRef>
descriptorRefs>
configuration>
plugin>
plugins>
build>
》》》准备就绪开始编写插件
由于默认生成的mapper、model、xml文件不够灵活,当需要添加额外的sql操作时需要手动添加Dao类进行扩展,而且重复生成时,xml文件会一直追加。为解决以上问题,尝试添加自定义扩展生成java文件和xml文件。
在cn.aesop.extend.plugin包下创建类AddExtendDaoPlugin.java 继承org.mybatis.generator.api.PluginAdapter 开始编写自定义插件
更多细节参见:https://github.com/aesopcmc/mybatis-generator-extend/blob/master/extend/src/main/java/cn/aesop/extend/plugin/AddExtendDaoPlugin.java
重写 validate 返回true,插件才能生效
@Override
public boolean validate(List<String> list) {
// TODO 自定义验证
return true;
}
处理默认生成的文件不追加,直接覆盖
@Override
public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) {
daoBaseName = introspectedTable.getFullyQualifiedTable().getDomainObjectName() + "Dao";
try {
Field field = sqlMap.getClass().getDeclaredField("isMergeable");
field.setAccessible(true);
field.setBoolean(sqlMap, false);
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
在插件类中可以直接通过properties 获取传入的参数
String targetPackage = properties.getProperty("targetPackage");
对于如何传入参数后续进行说明
生成扩展xxxDao.java文件
该方法会对应每一个实体,只生成一次,已生成的不会覆盖
@Override
public List<GeneratedJavaFile> contextGenerateAdditionalJavaFiles(IntrospectedTable introspectedTable) {
// ...
}
生成扩展xxxDao.xml文件
该方法会对应每一个实体,只生成一次,已生成的不会覆盖
@Override
public List<GeneratedXmlFile> contextGenerateAdditionalXmlFiles(IntrospectedTable introspectedTable) {
// ...
}
在cn.aesop.extend.plugin包下创建类UseLombokPlugin.java 继承org.mybatis.generator.api.PluginAdapter 开始编写
更多细节参见:https://github.com/aesopcmc/mybatis-generator-extend/blob/master/extend/src/main/java/cn/aesop/extend/plugin/UseLombokPlugin.java
在cn.aesop.extend.comment包下创建类MySQLCommentGenerator.java 开始编写
更多细节参见:https://github.com/aesopcmc/mybatis-generator-extend/blob/master/extend/src/main/java/cn/aesop/extend/comment/MySQLCommentGenerator.java
在cn.aesop.extend.resolver包下创建类MyJavaTypeResolverDefaultImpl.java 继承org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl 开始编写
更多细节参见:https://github.com/aesopcmc/mybatis-generator-extend/blob/master/extend/src/main/java/cn/aesop/extend/comment/MySQLCommentGenerator.java
详细配置参看:https://github.com/aesopcmc/mybatis-generator-extend/tree/master/example
pom.xml配置说明
lombok
、mybatis-spring-boot-starter Mybatis核心
mybatis-generator-maven-plugin
,引入依赖,该依赖是上面打包好的扩展jar extend-1.0-SNAPSHOT.jar
generatorConfig.xml
中引用使用generatorConfig.xml配置说明
MyBatis3:默认值,可以生成带有XxxExampl的文件
flat:
该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。一般使用这个模型就够了
通过plugin
标签type
属性引入插件,使用property添加插件传入插件参数
通过commentGenerator
标签 type
属性添加自定义注解,注意需要设置addRemarkComments
属性值为true
通过javaTypeResolver
标签 type
属性自定义类映射。
在table
标签下添加
,插入数据会返回主键绑定,还可以添加枚举映射
完毕。
以上内容涉及到的技术来源
官方文档
官方源码样例demo