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 包下。
void update(Map<String, Object> dataMap) 方法修改 org.mybatis.generator.codegen.mybatis3.javamapper.elements.UpdateByPrimaryKeyWithoutBLOBsMethodGenerator 類:
FullyQualifiedJavaType.getVoidInstance()introspectedTable.getUpdateByPrimaryKeyStatementId()Map,參數名 dataMapMethod 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"));
<update> 語句,支援字段非空判斷修改 org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.UpdateByPrimaryKeyWithoutBLOBsElementGenerator 類:
parameterType="Map"<set> 區塊遍歷所有列,生成 <if test="col != null and col != ''"> 動態賦值<where> 區塊拼接主鍵條件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 文件。
pom.xml)maven-jar-plugin:配置 Manifest 主類為 org.mybatis.generator.api.ShellRunner,包含 org/** 類文件maven-assembly-plugin:綁定 src/main/assembly/src.xml,輸出 ZIP 包含 JAR、配置文件、啟動腳本src.xml)定義文件集:資源文件(generatorConfig.xml)、啟動腳本(run.bat)、構建產出 JAR 及 Sources JAR。
run.bat)java -jar mybatis-generator-1.3.2.jar -configfile generatorConfig.xml -overwrite
pause
mvn clean package
產出物位於 target/ 目錄,包含可直接分發使用的 mybatis-generator-core-1.3.2.jar 及完整運行環境。
通過源碼級定制,可實現代碼風格統一、業務方法擴展、註解規範化等目標。建議團隊將定制版 JAR 發佈至私有 Maven 倉庫,在 generatorConfig.xml 中引用坐標,實現「配置即代碼」的生成流程。修改過程中多閱讀源碼結構,理解 IntrospectedTable、FullyQualifiedJavaType 等核心模型,能事半功倍。