mybatis generator 源码修改
项目中使用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,即可生成文件。

mybatis generator 源码修改的更多相关文章
- mybatis generator 源码学习
mybatis/generator 源码地址mybatis/parent 源码地址1. 分别点击Download ZIP下载到本地. 2. 解压generator-master.zip中的core到g ...
- 从代码生成说起,带你深入理解 mybatis generator 源码
枯燥的任务 这一切都要从多年前说起. 那时候刚入职一家新公司,项目经理给我分配了一个比较简单的工作,为所有的数据库字段整理一张元数据表. 因为很多接手的项目文档都不全,所以需要统一整理一份基本的字典表 ...
- 【狂神说】JAVA Mybatis 笔记+源码
简介 自学的[狂神JAVA]MyBatis GitHub源码: https://github.com/Donkequan/Mybatis-Study 分享自写源码和笔记 配置用的 jdk13.0.2 ...
- Java学习-039-源码 jar 包的二次开发扩展实例(源码修改)
最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展, ...
- python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改
python的paramiko源码修改了一下,写了个操作命令的日志审计,但是记录的日志中也将backspace删除键记录成^H这个了,于是改了一下代码,用字符串的特性. 字符串具有列表的特性 > ...
- Android6.0 源码修改之 Contacts应用
一.Contacts应用的主界面和联系人详情界面增加顶部菜单添加退出按钮 通过Hierarchy View 工具可以发现 主界面对应的类为 PeopleActivity 联系人详情界面对应的类为 Qu ...
- Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮
前言 之前写过屏蔽系统导航栏功能的文章,具体可看Android6.0 源码修改之屏蔽导航栏虚拟按键(Home和RecentAPP)/动态显示和隐藏NavigationBar 在某些特殊定制的版本中要求 ...
- Android6.0 源码修改之屏蔽系统短信功能和来电功能
一.屏蔽系统短信功能 1.屏蔽所有短信 android 4.2 短信发送流程分析可参考这篇 戳这 源码位置 vendor\mediatek\proprietary\packages\apps\Mms\ ...
- el-upload源码修改跳坑
之前给element-ui提了一个问题,结果没有鸟我,没办法,只能修改源码来满足需求了 (备注:element-ui2依然没有修改,为了迎合产品还是要改源码) 本文讨论的组件属性仅限于list-typ ...
随机推荐
- centos7安装android studio遇到Unable to run mksdcard sdk tool
centos系统为最小化安装,所以安装新软件时缺少许多依赖包,Android Studio下载的mksdcard是32位的,而系统是64位的,所以需要安装支持32位软件的依赖包. sudo yum i ...
- selenium环境搭建:Error: could not find java.dll 报错问题
搭建java环境,参照其他的安装步骤,搭建即可. 问题:出现如下报错信息. Error: could not find java.dll Error: Could not find Java SE R ...
- 27. ClustrixDB 分布式架构/一致性、容错和可用性
一致性 许多分布式数据库都采用最终一致性而不是强一致性来实现可伸缩性.但是,最终的一致性会增加应用程序开发人员的复杂性,他们必须针对可能出现的数据不一致的异常进行开发. ClustrixDB提供了一个 ...
- js 数组的forEach 函数
var numbers = [4, 9, 16, 25]; function myFunction(item, index) { console.log("item:" + ite ...
- [Flask]celery异步任务队列的使用
Celery异步任务队列 目录结构树: 配置文件config.py: # 设置中间人地址 broker_url = 'redis://127.0.0.1:6379/1' 主main.py: impor ...
- 【BZOJ5415&UOJ393】归程(Kruskal重构树,最短路)
题意:From https://www.cnblogs.com/Memory-of-winter/p/11628351.html 思路:先从1开始跑一遍dijkstra,建出kruskal重构树之后每 ...
- 1143, 3997: Dilworth定理的简单应用
偏序集上的最小链覆盖等于最长反链 于是两道题 1143: [CTSC2008]祭祀river 求偏序集上的最长反链 转换成偏序集上的最小链覆盖 求个闭包,转换成最小路径覆盖,二分图匹配一发 #incl ...
- Android重写HorizontalScrollView模仿ViewPager效果
Android提供的ViewPager类太复杂,有时候没有必要使用,所以重写一个HorizontalScrollView来实现类似的效果,也可以当做Gallery来用 思路很简单,就是重写onTouc ...
- JS框架_(JQuery.js)图片相册掀开切换效果
百度云盘 传送门 密码:y0dk 图片掀开切换效果: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...
- 理解PyTorch的自动微分机制
参考Getting Started with PyTorch Part 1: Understanding how Automatic Differentiation works 非常好的文章,讲解的非 ...