mybatis generator的自定义扩展 生成扩展Java文件,代码生成覆盖,自定义注释,类型映射,使用Lombok代替getter、Setter

为了让mybatis generator生成的代码更符合自己企业的需求,可以通过以下方式,扩展mybatis generator

例子包含扩展功能:

生成通用扩展Dao文件(包含java文件和xml文件),对自定义sql和默认sql的统一操作;
去除无用的注释,按照列备注显示到实体字段注释;
自定义Jdbc类型到java类型映射;
使用Lombok代替getter、Setter

Github 源码:查看

一、编写扩展插件

新创建一个基本的maven项目命名Extend

本文中的扩展主要以打jar包方式引入到mybatis generator 插件中,扩展、插件的编写都在extend项目中进行。
项目结构如下,创建自己需要的包,如comment、plugin、resolver
在这里插入图片描述
pom.xml 加入打包插件,引入mybatis-generator核心依赖

<dependencies>
   <dependency>
         <groupId>org.mybatis.generator</groupId>
         <artifactId>mybatis-generator-core</artifactId>
         <version>1.3.5</version>
     </dependency>
 </dependencies>

 <build>
     <plugins>
         <!-- 打Jar包插件 -->
         <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-assembly-plugin</artifactId>
             <version>2.5.5</version>
             <configuration>
                 <archive>
                     <manifest>
                         <!--<mainClass>com.xxg.Main</mainClass>-->
                     </manifest>
                 </archive>
                 <descriptorRefs>
                     <descriptorRef>jar-with-dependencies</descriptorRef>
                 </descriptorRefs>
             </configuration>
         </plugin>
     </plugins>
 </build>

》》》准备就绪开始编写插件

生成扩展Dao文件

由于默认生成的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) {
	// ...
}

使用Lombok注解替换Getter、Setter方法

在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

自定义注解,加载数据库comment注解,去除默认生成的无用的注释

在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

Jdbc类型到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

打包,生成jar文件

在这里插入图片描述在这里插入图片描述

二、项目使用mybatis generator生成文件、并添加扩展

详细配置参看:https://github.com/aesopcmc/mybatis-generator-extend/tree/master/example
pom.xml配置说明

  1. 引入两个依赖lombokmybatis-spring-boot-starter Mybatis核心
  2. 添加mybatis generator的maven插件 mybatis-generator-maven-plugin ,引入依赖,该依赖是上面打包好的扩展jar extend-1.0-SNAPSHOT.jar
  3. 配置属性properties:mybatis.generator.xxx开头的属性皆为generator内置属性,其他为自定义属性,可在配置文件generatorConfig.xml中引用使用

generatorConfig.xml配置说明
<context targetRuntime="MyBatis3" defaultModelType="flat">
MyBatis3:默认值,可以生成带有XxxExampl的文件
flat:
该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。一般使用这个模型就够了

通过plugin标签type属性引入插件,使用property添加插件传入插件参数

通过commentGenerator标签 type属性添加自定义注解,注意需要设置addRemarkComments属性值为true

通过javaTypeResolver标签 type属性自定义类映射。

table标签下添加<generatedKey column="id" sqlStatement="JDBC"/> ,插入数据会返回主键绑定,还可以添加枚举映射 <columnOverride column="model_name" jdbcType="VARCHAR" javaType="cn.aesop.example.enums.ModelNameEnum"/>

配置完成,执行maven插件生成代码
在这里插入图片描述

完毕。

以上内容涉及到的技术来源
官方文档
官方源码样例demo

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值