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

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM