mybatis generator给我们开发带来诸多方便,免去一些繁琐的自写mapper、dao、实体类的步骤,但是有时会根据自己需要定制自己的东西,比如生成带注释的实体类,这时需要我们修改generator的源码。
到网上下载源码包(地址:https://github.com/mybatis/generator/releases),这里我用的是1.3.6版本,解压后下再解压里面的
source包,创建maven项目,把源放进去。
打开org.mybatis.generator.api.dom.java.Field类,这是生成实体文件属性的写入类
找到getFormattedContent这个方法,加上这段代码,表示在写入属性名后面加上注释。
这样还没不行,我们打开org.mybatis.generator.internal.util.JavaBeansUtil类。在getJavaBeansField方法中加入如下代码
这样就完成了读取表字段注释写入到实体类中。
接着我们看看如何在类名上面加上类模型对应的表名和表注释
我们直接找到org.mybatis.generator.internal.DefaultCommentGenerator类的addModelClassComment方法,
我们直接将下面这个条件判断注释掉(suppressAllComents和addRemarkComents可以在generator.xml设置的属性,我这里暴力强制去除这个条件,具体可以自己研究。)
在下面这行表示获取表注释
接着定制自己的注释样式
把没必要的可以注释掉不让生成
当我们打包后把它替换原来的jar包再用它处理生成时发觉只生成了属性注释,没有对应的表注释。
于是我们打开连接jdbc连接数据库的工厂类org.mybatis.generator.internal.JDBCConnectionFactory,找到getConnection这个方法
在连接属性设置这里加上这一行。
好!接着打包生成jar文件,替换原来的jar包,再次执行生成。
没问题!
但是如果我们要加上是对应哪个表要怎么弄呢?
我们再回到org.mybatis.generator.internal.DefaultCommentGenerator类的addModelClassComment方法里,
知道introspectedTable这个是可以获取表属性的一个对象,但是我们在类里面发现并没有能获取表名的属性,这时我们可以自己加上表名的属性。
我们接着看看怎么获取表名名并设置到属性里面,
找到org.mybatis.generator.internal.db.DatabaseIntrospector这个类的enhanceIntrospectedTable方法
再这里获取表名和设置对象属性
最后在addModelClassComment方法上加上如下代码
好的,可以了。为了防止注释上的中文乱码。找到org.mybatis.generator.api.MyBatisGenerator写入实体类文件的方法writeFile。加上UTF-8输出流方式
最后打包替换,再次生成实体类文件,如图