项目中使用mybatis + 通用mapper,用mybatis generator生成代码时有些不方便,参考了网上的一些例子,修改mybatis genrerator的源码。

首先,下载mybatis generator 1.3.6 源码(注意,版本不同代码肯定有比较大的差别),打开之后目录结果如下,所有要修改的代码,都在子项目mybatis-generator-core中

1、禁止生成mybatis自带的example文件及相应的方法,禁止数据库字段名驼峰转换,去掉数据库表名前缀

  这些都不需要改源码,只需要在自己写的mybatis generator配置文件中做一下设置,如下图

  

  【注意】第二条,domainObjectRenamingRule,此属性,我印象中在mybatis-generator-1.3.6/1.3.7存在,以前版本好像没有,具体我就不考证了。

2、实体类

  2.1 去掉getter,setter方法,使用lombok的@Data注解代替,加入@Table注解,@Id等注解。

  在包org.mybatis.generator.plugins下,新建一个继承自PluginAdapter(位于org.mybatis.generator.api下)的类,名字随意,我这里的名字叫LombokPlugin,

  在LombokPlugin覆写PluginAdapter的PluginAdapter.modelSetterMethodGenerated()以及modelGetterMethodGenerated(),令两个方法都返回false

  

  2.2 修改类注解

  覆写PluginAdapter.modelBaseRecordClassGenerated()

  这里实体类上加入了@Data,@Accessors,@Table,通过参数intrspectedTable获取到数据库表名

  

  2.3 在id字段上加入@Id和@GeneratedValue

  覆写PluginAdapter.modelFieldGenerated(),给自增的字段或者名为id的字段增加注解@Id和GeneratedValue,所有字段,都添加@Column

  

3、禁止生成所有默认的方法,selectByPrimaryKey,updateByPrimaryKey,deleteByPrimaryKey,insert,insertSelective,包括interface和xml文件中

  这个只要对以下配置全部置为false就可以,

  

  然而,虽然方法都没有了,可造成两个后果1、实体类、interface、xml文件不生成了2、即便生成,xml文件缺少<resultMap>元素

  对于后果1,修改org.mybatis.generator.config.Context.introspectTables(),把如下位置的continue语句注释掉,这样,在mybatis 配置文件的table元素,当所有enableInsert enableSelectByPrimaryKey等等都为false的情况下,仍然可以生成entity,interface,xml

  

  对于后果2,xml文件缺少<resultMap>,比较麻烦,因为通过代码发现,生成resultMap的代码在org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.SelectByPrimaryKeyElementGenerator.addElements()中,因此enableSelectByPrimaryKey必须为true

  

  这样就必须修改在interface和xml中生成selectByPrimaryKey的方法,

  3.1 修改接口方法

  修改org.mybatis.generator.codegen.mybatis3.javamapper.elements.SelectByPrimaryKeyMethodGenerator.addInterfaceElements()

  注释interfaze.addMethod(method);

  

  3.2 修改生成xml的方法

  修改org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.SelectByPrimaryKeyElementGenerator.addElements()

  注释parentElement.addElement(answer);

  

  通过以上修改,enableSelectByPrimaryKey=true,也不会在interface和xml中生成selectByPrimaryKey,并且保留xml中的<resultMap>。

4、mapper接口文件添加extends Mapper<实体类>,并且加入import语句

  在LombokPlugin中,覆写PluginAdapter.clientGenerated(),

  introspectedTable.getBaseRecordType获取实体类名

  interfaze.addSuperInterface添加继承类

  interfaze.addImportedType添加要import的类型

  

5、打包

  修改了代码,还需要生成jar包,并把jar包更新到本地maven repository中

  

6、如何使用mybatis generator

  当修改了代码的mybatis generator的jar包更新到本地maven仓库中后(上一步),就可以在项目中通过maven命令生成文件,操作方法如下

  在项目pom文件中引入mybatis generator

  

  然后,在pom中添加如下内容,其中generatorConfig.xml是你的mybatis generator配置文件,这个文件mybatis generator有模板,这里不做说明

  

  然后,修改mybatis generator 配置文件各个参数,如数据库链接,生成的路径,指定表名或全部生成等参数,

  最后,在Maven Projects的如图位置,双击mybatis-generator:generate,即可生成文件。

  

最新文章

  1. 谈谈RPC中的异步调用设计
  2. CRC16 三种算法及c实现
  3. SpringBoot使用的心得记录
  4. VS2012 OpenCV2.4.9 Debug可以允许,Release不可以
  5. Win2003+Powershell2.0下无权限解锁账号
  6. 读《程序员的SQL金典》[1]--基础数据检索
  7. uva387 - A Puzzling Problem
  8. SendMessage 窗口函数
  9. JS、C#编码解码
  10. 浅谈MDX处理空值NULL及格式化结果
  11. 利用Visual Studio寻找C#程序必要的运行库文件
  12. Qdocconf 写法
  13. JS阻塞以及CSS阻塞
  14. Java中import及package的用法
  15. Oracle12c(12.1)中性能优化&amp;amp;功能增强之通过参数THREADED_EXECTION使用多线程模型
  16. [转帖]Qemu 简述
  17. vue实现验证码倒计时60秒的具体代码
  18. 18.22 sprintf函数功能
  19. C#实现全窗体范围拖动
  20. PyQt5--QComboBox

热门文章

  1. 数组 slice方法和splice方法的区别
  2. jquery设置css属性几种方式
  3. Angular 文档中的修改链接是从哪里改的
  4. BZOJ 5326 [JSOI2017]博弈 (模拟费用流、线段树)
  5. UE4 使用VaRest的最佳实践
  6. js多种方法取数组的最后一个元素
  7. [CSP-S模拟测试]:停不下来的团长奥尔加(DP)
  8. 分布式-信息方式-ActiveMQ的消息存储持久化
  9. C++入门经典-例6.11-使用指针变量遍历二维数组
  10. 如何把java项目打包成war包