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

Maven 多模塊項目集成 MyBatis Generator:從配置到代碼生成全流程

     編輯:Java 綜合教學

Maven 多模塊項目集成 MyBatis Generator:從配置到代碼生成全流程

在企業級 Maven 多模塊架構中,合理配置 MyBatis Generator (MBG) 能實現Model、DAO 接口、Mapper XML的精準分層生成。本文以個人博客系統為例,詳細講解模塊劃分、POM 配置、Generator 配置文件編寫、驅動依賴處理與常見坑點。

一、項目模塊劃分與依賴關係


blog-parent (pom)
├── blog-model          # 實體類 (Entity/POJO)
├── blog-dao-api        # DAO 接口 + MBG 插件配置 (核心生成模塊)
├── blog-dao-impl       # Mapper XML 文件
└── blog-service        # 業務邏輯 (依賴 dao-api, dao-impl)

依賴方向:dao-api → model,dao-impl → dao-api,service → dao-api, model。

二、核心模塊 blog-dao-api POM 關鍵配置

<project>
    <parent>
        <groupId>pers.kaloquan</groupId>
        <artifactId>blog</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>blog-dao-api</artifactId>

    <properties>
        <mysql-connector.version>5.1.40</mysql-connector.version>
        <mybatis-generator.version>1.3.5</mybatis-generator.version>
        
        <!-- MBG 插件配置屬性 -->
        <plugin.generator.configurationFile>${project.basedir}/src/main/resources/mybatis-generator.xml</plugin.generator.configurationFile>
        <plugin.generator.overwrite>true</plugin.generator.overwrite>
        
        <!-- 生成目標項目根目錄 (關鍵:多模塊需絕對路徑) -->
        <generator.project.root>D:/IDEAProjects/blog</generator.project.root>
        
        <!-- 驅動包絕對路徑 (MBG 運行時需加載驅動) -->
        <generator.classpath>D:/Maven repository/mysql/mysql-connector-java/5.1.40/mysql-connector-java-5.1.40.jar</generator.classpath>
        
        <!-- 數據庫連接信息 -->
        <jdbc.driverClass>com.mysql.jdbc.Driver</jdbc.driverClass>
        <jdbc.url>jdbc:mysql://localhost:3306/blog?createDatabaseIfNotExist=true&useSSL=true&serverTimezone=UTC</jdbc.url>
        <jdbc.userId>root</jdbc.userId>
        <jdbc.password>root</jdbc.password>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>pers.kaloquan</groupId>
            <artifactId>blog-model</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>${mybatis-generator.version}</version>
                <configuration>
                    <configurationFile>${plugin.generator.configurationFile}</configurationFile>
                    <overwrite>${plugin.generator.overwrite}</overwrite>
                </configuration>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <phase>generate-sources</phase> <!-- 綁定生命周期 -->
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <!-- MBG 運行時依賴驅動 -->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>${mysql-connector.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

三、mybatis-generator.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>
    <!-- 驅動類加載路徑 (必須) -->
    <classPathEntry location="${generator.classpath}"/>

    <context id="ctx" targetRuntime="MyBatis3Simple"> <!-- 簡化運行時,無 Example 類 -->
        <commentGenerator>
            <property name="suppressDate" value="true"/> <!-- 不生成時間戳,減少版本衝突 -->
        </commentGenerator>

        <!-- 數據庫連接 (引用 POM 屬性) -->
        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.userId}"
                        password="${jdbc.password}"/>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/> <!-- DECIMAL/NUMERIC 生成 BigDecimal,非 Double -->
        </javaTypeResolver>

        <!-- 1. 實體類生成到 blog-model -->
        <javaModelGenerator targetPackage="blog.model"
                            targetProject="${generator.project.root}/blog-model/src/main/java">
            <property name="enableSubPackages" value="false"/>
            <property name="trimStrings" value="true"/> <!-- 自動 trim 字符串字段 -->
        </javaModelGenerator>

        <!-- 2. Mapper XML 生成到 blog-dao-impl -->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="${generator.project.root}/blog-dao-impl/src/main/resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 3. DAO 接口生成到 blog-dao-api (使用註解模式) -->
        <javaClientGenerator targetPackage="blog.dao"
                             targetProject="${generator.project.root}/blog-dao-api/src/main/java"
                             type="ANNOTATEDMAPPER"> <!-- 關鍵:註解模式 -->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 表配置 -->
        <table tableName="user" schema="blog">
            <columnOverride column="id" property="id"/>
            <columnOverride column="name" property="name"/>
        </table>
    </context>
</generatorConfiguration>

四、關鍵配置點深度解析

配置項作用多模塊注意事項
targetRuntime="MyBatis3Simple" 生成簡化版 Mapper (無 Example、無動態 SQL),適合註解模式 若需 Example 查詢,用 MyBatis3,但需生成 Example 類到 model 模塊
type="ANNOTATEDMAPPER" DAO 接口使用 @Select 等註解,無需 XML (XML 仍單獨生成) XML 由 sqlMapGenerator 生成到 dao-impl,接口與 XML 同名同包自動綁定
targetProject 絕對路徑 指定生成文件輸出目錄 必須用絕對路徑,相對路徑在多模塊下會解析錯誤。用 Maven 屬性 ${generator.project.root} 統一管理
classPathEntry 驅動路徑 MBG 運行時加載 JDBC 驅動 指向本地倉庫具體 Jar 絕對路徑,或配置 <plugin> dependencies 引入驅動 (推薦)
overwrite=true 覆蓋已存在文件 生產環境建議 false,配合版本控制手動合併

五、執行生成與驗證

# 在 blog-dao-api 模塊執行
mvn clean mybatis-generator:generate

# 或綁定生命周期後,直接
mvn clean compile

預期生成產物

  • blog-model/src/main/java/blog/model/User.java — 實體類 (含 getter/setter/toString)
  • blog-dao-api/src/main/java/blog/dao/UserMapper.java — 註解式接口
  • blog-dao-impl/src/main/resources/mapper/UserMapper.xml — XML 映射 (若 targetRuntime=MyBatis3)

六、常見問題排查

  1. 找不到驅動類:檢查 classPathEntry 路徑是否存在,或在 plugin dependencies 中顯式添加驅動依賴。
  2. 生成路徑錯誤:確認 targetProject 為絕對路徑,且目錄存在 (Maven 不會自動創建)。
  3. 表名大小寫:MySQL Windows 不區分,Linux 區分。配置 tableName 精確匹配數據庫實際表名。
  4. 生成代碼不符合規範:自定義 CommentGenerator 插件,控制註解、Lombok 註解、Builder 模式等。
  5. 多數據源/多 Schema:配置多個 <context>,分別指定 jdbcConnection 與 table。

七、進階:自定義插件生成 Lombok + Builder 模式

<plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.github.jeffreyning</groupId>
            <artifactId>mybatis-generator-plugin</artifactId>
            <version>1.3.1</version>
        </dependency>
    </dependencies>
</plugin>

<!-- generatorConfig.xml 中 -->
<commentGenerator type="com.github.jeffreyning.mybatis.generator.PluginCommentGenerator">
    <property name="generateEntityBuilder" value="true"/>
    <property name="generateEntityToString" value="true"/>
    <property name="lombok" value="true"/>
</commentGenerator>

通過合理的模塊劃分、Maven 屬性參數化、Generator 精準配置,MyBatis Generator 能完美融入多模塊項目,實現「改表結構 → 執行命令 → 代碼自動同步」的高效開發閉環,消除手寫映射的重複勞動與錯誤隱患。

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