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

MyBatis Generator 自動生成代碼完整教學 (DAO、Mapping、POJO)

     編輯:Java 相關知識

工具介紹

MyBatis Generator (MBG) 是官方提供的代碼生成工具,能根據資料庫表結構自動生成 MyBatis 所需的實體類、Mapper 介面、XML 映射檔案,大幅減少重複性編碼工作。

環境準備

必要 JAR 檔案

  • mybatis-generator-core-x.x.x.jar (核心生成器)
  • 資料庫驅動程式:
    • SQL Server: sqljdbc4.jar
    • MySQL: mysql-connector-java-x.x.x.jar
    • Oracle: ojdbc8.jar
    • PostgreSQL: postgresql-x.x.x.jar

目錄結構建立

project-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 介面

常見問題與解決方案

1. 驅動類別找不到 (ClassNotFoundException)

  • 確認 classPathEntry location 路徑正確 (相對執行指令的工作目錄)
  • JAR 檔名稱需完全一致 (含版本號)

2. 連線失敗 (Communications link failure)

  • 檢查 IP、Port、資料庫名稱、防火牆設定
  • MySQL 8.0+ 需加時區參數:?serverTimezone=Asia/Taipei
  • SQL Server 需啟用 TCP/IP 協定 (SQL Server Configuration Manager)

3. 生成代碼包含大量 Example 類別

  • 將 enableCountByExample 等四個屬性設為 false
  • 或使用 targetRuntime="MyBatis3Simple" 僅生成基本 CRUD

4. 欄位類型映射不符預期

  • 調整 javaTypeResolver.forceBigDecimals (DECIMAL/NUMERIC 對應 BigDecimal vs Double)
  • 使用 <columnOverride> 強制指定特定欄位的 Java 類型

進階應用:Maven 整合 (推薦專案實務做法)

在 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>

最佳實踐建議

  1. 版控管理:將 generatorConfig.xml 納入版控,生成的代碼建議不納入 (由 CI/CD 階段產生)
  2. 分模組生成:大型專案按業務域分多個 context,避免單次生成過多檔案
  3. 自定義模板:透過 <plugin> 擴充,自訂註解、Lombok 註解、Swagger 註解等
  4. 命名規範:統一 domainObjectName 命名風格,配合資料表前綴處理

總結

MyBatis Generator 是提升開發效率的利器,正確配置可一次生成符合專案規範的完整持久層代碼。建議採用 Maven 插件方式整合至建構流程,配合自定義插件滿足企業級開發需求 (如 Lombok、驗證註解、審計欄位自動填充等)。

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