MyBatis Generator (MBG) 是官方提供的代碼生成工具,能根據數據庫表結構自動生成 Model、Mapper 接口、XML 映射文件,極大提升開發效率。本文詳細記錄從下載、目錄準備、配置文件編寫、命令行生成到項目集成的全流程,並深度解析核心配置項含義。
TIMESTAMP 對應 Date 而非 LocalDateTime 導致 SqlSessionFactory 初始化失敗)。https://github.com/mybatis/generator/releases → mybatis-generator-core-x.x.x.jar
project-root/ ├── generatorConfig.xml # 核心配置 ├── src/ # 生成代碼輸出目錄 (targetProject) ├── mybatis-generator-core-1.3.2.jar └── mysql-connector-java-5.1.37.jar
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "https://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<classPathEntry location="mysql-connector-java-5.1.37.jar"/>
<context id="mysql" targetRuntime="MyBatis3Simple">
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://ip:3306/dbname"
userId="root" password="xxx">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="com.xxx.model" targetProject="src">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.xxx.mapper" targetProject="src">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.xxx.mapper" targetProject="src">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<table tableName="T_USER" domainObjectName="User"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"/>
</context>
</generatorConfiguration>
java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite
保持包結構一致,刷新項目即可使用。
| 元素/屬性 | 作用 | 關鍵值/建議 |
|---|---|---|
| context@targetRuntime | 生成代碼風格 | MyBatis3Simple:不生成 Example 類,更簡潔;MyBatis3:功能全 |
| context@defaultModelType | Model 拆分策略 | flat:單類(推薦);hierarchical:主鍵/Blob/其它分三類 |
| javaModelGenerator@targetPackage | Model 包路徑 | 必須與項目真實包一致,否則需手動調整 XML namespace |
| javaClientGenerator@type | Mapper 生成方式 | XMLMAPPER:接口+XML(推薦);ANNOTATEDMAPPER:純注解 |
| table@enableXXXByExample | 控制 Example 方法生成 | 簡化風格建議全部 false,僅保留主鍵 CRUD |
| columnOverride | 列屬性覆蓋 | 指定 property(屬性名)、javaType、jdbcType、typeHandler |
| ignoreColumn | 忽略列 | 如 deptId 不想生成實體屬性/映射 |
| generatedKey | 主鍵回寫策略 | MySQL: sqlStatement="MySql" (SELECT LAST_INSERT_ID()) |
lower_case_table_names 系統變量,配置 tableName 時建議與數據庫定義完全一致,或設置 delimitIdentifiers="true"。DATETIME/TIMESTAMP 默認映射 java.util.Date,若項目用 Java 8 LocalDateTime,必須在 columnOverride 中顯式指定 javaType="java.time.LocalDateTime" 並配合 typeHandler。MyBatis Generator 是數據庫驅動開發的利器。掌握核心配置、建立團隊統一模板、配合 CI/CD 自動化生成,能讓數據庫變更從「痛點」變為「常態操作」。建議項目初期即引入,並將 generatorConfig.xml 納入版本控制。