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,即可生成文件。

   

 

posted @ 2019-02-19 15:27  leondryu  阅读(1860)  评论(0编辑  收藏  举报