首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

MyBatis Generator 逆向工程深度定制:源碼修改與 Maven 打包全流程

     編輯:Java 相關知識

MyBatis Generator(MBG)作為主流 ORM 代碼生成工具,默認模板往往難以滿足團隊統一代碼風格與業務擴展需求。本文基於 mybatis-generator-core-1.3.2 源碼,詳細記錄 Mapper 接口與 XML 映射文件的定制修改實戰,並給出 Maven 打包發佈完整配置,助力構建專屬代碼生成器。

一、 源碼獲取與項目導入

從 Maven 倉庫下載 mybatis-generator-core-1.3.2-sources.jar 或直接導入 Maven 項目源碼至 Eclipse/IDEA。項目結構遵循標準 Maven 佈局,核心生成邏輯集中在 org.mybatis.generator.codegen.mybatis3 包下。

二、 Mapper 接口方法定制實戰

1. 目標:生成 void update(Map<String, Object> dataMap) 方法

修改 org.mybatis.generator.codegen.mybatis3.javamapper.elements.UpdateByPrimaryKeyWithoutBLOBsMethodGenerator 類:

  • 返回類型設置為 FullyQualifiedJavaType.getVoidInstance()
  • 方法名復用 introspectedTable.getUpdateByPrimaryKeyStatementId()
  • 參數類型改為 Map,參數名 dataMap
  • 保留註解生成與插件擴展點調用

2. 關鍵代碼片段

Method method = new Method();
method.setVisibility(JavaVisibility.PUBLIC);
method.setReturnType(FullyQualifiedJavaType.getVoidInstance());
method.setName(introspectedTable.getUpdateByPrimaryKeyStatementId());
FullyQualifiedJavaType mapType = FullyQualifiedJavaType.getMyMapInstance();
method.addParameter(new Parameter(mapType, "dataMap"));

三、 XML 映射文件定制實戰

1. 目標:生成動態 <update> 語句,支援字段非空判斷

修改 org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.UpdateByPrimaryKeyWithoutBLOBsElementGenerator 類:

  • 根元素屬性 parameterType="Map"
  • <set> 區塊遍歷所有列,生成 <if test="col != null and col != ''"> 動態賦值
  • <where> 區塊拼接主鍵條件

2. 核心邏輯

XmlElement setElement = new XmlElement("set");
for (IntrospectedColumn col : introspectedTable.getAllColumns()) {
    XmlElement ifElement = new XmlElement("if");
    String column = MyBatis3FormattingUtilities.getEscapedColumnName(col);
    ifElement.addAttribute(new Attribute("test", column + " != null and " + column + " != ''"));
    ifElement.addElement(new TextElement(column + " = " + MyBatis3FormattingUtilities.getParameterClause(col) + (iter.hasNext() ? "," : "")));
    setElement.addElement(ifElement);
}

四、 驗證配置與運行

編寫 generatorConfig.xml 指定數據源、目標包路徑、表映射策略(關閉 Example 相關方法),編寫 StartUp.java 啟動生成。運行後目標目錄產出符合預期的 Mapper 接口與 XML 文件。

五、 Maven 打包發佈配置

1. 核心插件配置(pom.xml)

  • maven-jar-plugin:配置 Manifest 主類為 org.mybatis.generator.api.ShellRunner,包含 org/** 類文件
  • maven-assembly-plugin:綁定 src/main/assembly/src.xml,輸出 ZIP 包含 JAR、配置文件、啟動腳本

2. 組裝描述符(src.xml)

定義文件集:資源文件(generatorConfig.xml)、啟動腳本(run.bat)、構建產出 JAR 及 Sources JAR。

3. 啟動腳本(run.bat)

java -jar mybatis-generator-1.3.2.jar -configfile generatorConfig.xml -overwrite
pause

4. 打包命令

mvn clean package

產出物位於 target/ 目錄,包含可直接分發使用的 mybatis-generator-core-1.3.2.jar 及完整運行環境。

六、 總結與建議

通過源碼級定制,可實現代碼風格統一、業務方法擴展、註解規範化等目標。建議團隊將定制版 JAR 發佈至私有 Maven 倉庫,在 generatorConfig.xml 中引用坐標,實現「配置即代碼」的生成流程。修改過程中多閱讀源碼結構,理解 IntrospectedTable、FullyQualifiedJavaType 等核心模型,能事半功倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved