MyBatis Generator (MBG) 是官方提供的代碼生成工具,能根據資料庫表結構自動生成 MyBatis 所需的實體類、Mapper 介面、XML 映射檔案,大幅減少重複性編碼工作。
mybatis-generator-core-x.x.x.jar (核心生成器)sqljdbc4.jarmysql-connector-java-x.x.x.jarojdbc8.jarpostgresql-x.x.x.jarproject-root/
├── lib/ # 存放所有 JAR 檔
│ ├── mybatis-generator-core-1.3.5.jar
│ └── sqljdbc4.jar # 或其他資料庫驅動
├── src/ # 生成代碼輸出目錄 (需手動建立)
└── generatorConfig.xml # 核心配置檔
<?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>
<!-- 資料庫驅動 JAR 路徑 (相對 lib 目錄) -->
<classPathEntry location="sqljdbc4.jar"/>
<!-- MySQL 範例: <classPathEntry location="mysql-connector-java-5.1.47.jar"/> -->
<context id="DBTables" targetRuntime="MyBatis3">
<!-- 註解生成器設定 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 資料庫連線設定 -->
<jdbcConnection driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"
connectionURL="jdbc:sqlserver://127.0.0.1:1433;databaseName=dbSSMTEST"
userId="sa" password="123">
</jdbcConnection>
<!-- MySQL 範例:
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydb?useSSL=false&characterEncoding=utf8"
userId="root" password="password"/> -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 實體類生成設定 (POJO) -->
<javaModelGenerator targetPackage="com.ssm.pojo" targetProject="src">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- XML 映射檔生成設定 -->
<sqlMapGenerator targetPackage="com.ssm.mapping" targetProject="src">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- Mapper 介面生成設定 (DAO) -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.ssm.dao" targetProject="src">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 目標資料表設定 -->
<table tableName="student" domainObjectName="Student"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
</table>
<!-- 多表範例:
<table tableName="teacher" domainObjectName="Teacher"/>
<table tableName="course" domainObjectName="Course"/> -->
</context>
</generatorConfiguration>
| 元素/屬性 | 說明 | 常用值 |
|---|---|---|
| targetRuntime | 生成代碼版本 | MyBatis3 (推薦), MyBatis3Simple |
| suppressAllComments | 是否抑制所有生成註解 | true/false |
| enableSubPackages | 是否依 schema 生成子套件 | true/false |
| type="XMLMAPPER" | 生成 Mapper 介面 + XML | 固定值 |
| tableName | 資料庫實際表名 | 區分大小寫視資料庫而定 |
| domainObjectName | 生成實體類類名 | 建議 PascalCase |
| enableXXXByExample | 是否生成 Example 查詢方法 | false 可減少冗餘代碼 |
在命令列 (CMD/PowerShell/Terminal) 切換至 lib 目錄,執行:
java -jar mybatis-generator-core-1.3.5.jar -configfile generatorConfig.xml -overwrite
-configfile:指定配置檔路徑-overwrite:覆蓋已存在檔案 (謹慎使用,建議先備份)執行成功後,src 目錄下將依套件結構生成:
src/
└── com/
└── ssm/
├── pojo/
│ └── Student.java # 實體類 (含 getter/setter/toString)
├── mapping/
│ └── StudentMapper.xml # SQL 映射檔 (CRUD + 動態 SQL)
└── dao/
└── StudentMapper.java # Mapper 介面
classPathEntry location 路徑正確 (相對執行指令的工作目錄)?serverTimezone=Asia/TaipeienableCountByExample 等四個屬性設為 falsetargetRuntime="MyBatis3Simple" 僅生成基本 CRUDjavaTypeResolver.forceBigDecimals (DECIMAL/NUMERIC 對應 BigDecimal vs Double)<columnOverride> 強制指定特定欄位的 Java 類型在 pom.xml 中引入插件,可直接用 mvn mybatis-generator:generate 執行:
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.1</version>
<configuration>
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>9.4.0.jre11</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
generatorConfig.xml 納入版控,生成的代碼建議不納入 (由 CI/CD 階段產生)<plugin> 擴充,自訂註解、Lombok 註解、Swagger 註解等domainObjectName 命名風格,配合資料表前綴處理MyBatis Generator 是提升開發效率的利器,正確配置可一次生成符合專案規範的完整持久層代碼。建議採用 Maven 插件方式整合至建構流程,配合自定義插件滿足企業級開發需求 (如 Lombok、驗證註解、審計欄位自動填充等)。