最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis-Plus代碼生成器(AutoGenerator)用法及說明

 更新時間:2026年05月11日 08:34:32   作者:Lisonseekpan  
MyBatis-Plus代碼生成器AutoGenerator是MyBatis-Plus提供提供的高效工具,能根據(jù)數(shù)據(jù)庫表結(jié)構(gòu)一鍵生成Entity、Mapper、MapperXML、Service和Controller代碼,大幅提高開發(fā)效率,本文詳細(xì)介紹了其依賴準(zhǔn)備、核心配置體系(重點介紹了FastD)和具體案例

1. 引言:MyBatis-Plus 代碼生成器概述

1.1 什么是 AutoGenerator?

MyBatis-Plus (MP) 代碼生成器,即 AutoGenerator,是 MyBatis-Plus 框架提供的一款高效工具。它的核心功能是根據(jù)數(shù)據(jù)庫表結(jié)構(gòu),一鍵生成項目所需的分層代碼,包括:

  • Entity (實體類/Model)
  • Mapper (持久層接口)
  • Mapper XML (映射文件)
  • Service (業(yè)務(wù)層接口及其實現(xiàn)類)
  • Controller (控制層)

AutoGenerator 極大地減少了開發(fā)者在項目初期或數(shù)據(jù)庫表結(jié)構(gòu)變更時編寫大量重復(fù)的 CRUD 代碼的工作量,是 MyBatis-Plus 提高開發(fā)效率的關(guān)鍵工具之一 [1]。

1.2 核心優(yōu)勢

相比于傳統(tǒng)的手動編寫或舊版代碼生成器,MyBatis-Plus AutoGenerator 具有以下優(yōu)勢:

  • 高度自動化:只需配置數(shù)據(jù)源和生成策略,即可完成全套代碼生成。
  • 配置靈活:支持通過鏈?zhǔn)?API 進(jìn)行精細(xì)化配置,包括命名策略、包結(jié)構(gòu)、字段處理等。
  • 模板豐富:內(nèi)置支持 Velocity、Freemarker、Beetl 等多種模板引擎,并允許用戶完全自定義代碼模板,以適應(yīng)不同的項目規(guī)范。
  • 現(xiàn)代 API:從 3.5.1 版本開始,引入了 FastAutoGenerator,采用流式 API 設(shè)計,配置更加簡潔、直觀和強(qiáng)大 [2]。

2. 依賴準(zhǔn)備

MyBatis-Plus 代碼生成器從 3.0.3 版本后將核心生成器和模板引擎解耦,因此需要手動引入相關(guān)依賴。

2.1 核心生成器依賴

在 Maven 項目中,需要引入 mybatis-plus-generator 依賴。建議使用 3.5.1 及以上版本以獲得最新的 FastAutoGenerator 功能。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.3.1</version> <!-- 請使用最新穩(wěn)定版本 -->
</dependency>

2.2 模板引擎依賴

MyBatis-Plus 默認(rèn)使用 Velocity 模板引擎,但推薦使用更強(qiáng)大的 Freemarker 或 Beetl。以下以 Freemarker 為例:

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.31</version> <!-- 請使用最新穩(wěn)定版本 -->
</dependency>

2.3 數(shù)據(jù)庫驅(qū)動

同時,還需要引入對應(yīng)數(shù)據(jù)庫的 JDBC 驅(qū)動(例如 MySQL Connector/J)。

3. 核心配置體系:FastAutoGenerator

MyBatis-Plus 推薦使用 FastAutoGenerator 類進(jìn)行配置,它通過流式 API 將配置過程劃分為四個主要步驟:數(shù)據(jù)源、全局配置、包配置和策略配置 [2]。

3.1 整體結(jié)構(gòu)

FastAutoGenerator.create(DATA_SOURCE_URL, USERNAME, PASSWORD)
    .globalConfig(builder -> {
        // 1. 全局配置 (GlobalConfig)
    })
    .packageConfig(builder -> {
        // 2. 包配置 (PackageConfig)
    })
    .strategyConfig(builder -> {
        // 3. 策略配置 (StrategyConfig)
    })
    .templateEngine(new FreemarkerTemplateEngine()) // 4. 模板引擎
    .execute(); // 5. 執(zhí)行生成

3.2 關(guān)鍵配置項詳解

3.2.1 全局配置 (GlobalConfig)

用于設(shè)置生成代碼的作者、輸出目錄、是否覆蓋文件等全局屬性。

方法描述示例
outputDir(String)設(shè)置代碼生成目錄的絕對路徑。builder.outputDir("D:/code_output");
author(String)設(shè)置開發(fā)人員名稱,用于代碼注釋。builder.author("Manus AI");
fileOverride()開啟文件覆蓋模式,謹(jǐn)慎使用。builder.fileOverride();
enableSwagger()開啟 Swagger 注解支持。builder.enableSwagger();
dateType(DateType)設(shè)置時間類型,如 DateType.ONLY_DATE。builder.dateType(DateType.TIME_PACK);

3.2.2 包配置 (PackageConfig)

用于定義生成的代碼文件的包結(jié)構(gòu)。

方法描述示例
parent(String)設(shè)置父包名。builder.parent("com.example.project");
moduleName(String)設(shè)置模塊名,會在父包下創(chuàng)建子包。builder.moduleName("user");
entity(String)設(shè)置實體類包名。builder.entity("model");
mapper(String)設(shè)置 Mapper 接口包名。builder.mapper("dao");
service(String)設(shè)置 Service 接口包名。builder.service("service");
controller(String)設(shè)置 Controller 包名。builder.controller("web");

3.2.3 策略配置 (StrategyConfig)

用于定義數(shù)據(jù)庫表和字段的生成策略,是配置最復(fù)雜的部分。

方法描述示例
addInclude(String...)必須:設(shè)置需要生成的表名。builder.addInclude("t_user", "t_order");
addTablePrefix(String...)設(shè)置需要過濾的表前綴。builder.addTablePrefix("t_", "sys_");
entityBuilder()實體類生成策略配置。builder.entityBuilder().enableLombok();
mapperBuilder()Mapper 接口生成策略配置。builder.mapperBuilder().enableMapperAnnotation();
serviceBuilder()Service 層生成策略配置。builder.serviceBuilder().formatServiceFileName("%sService");
controllerBuilder()Controller 層生成策略配置。builder.controllerBuilder().enableRestStyle();

4. 完整案例:Spring Boot 集成與代碼生成

本案例演示如何在 Spring Boot 項目中,使用 FastAutoGeneratorsys_user 表生成 Entity、Mapper、Service 和 Controller 代碼。

4.1 案例環(huán)境準(zhǔn)備

數(shù)據(jù)庫表結(jié)構(gòu):假設(shè) MySQL 中存在以下表:

CREATE TABLE `sys_user` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `user_name` varchar(50) NOT NULL COMMENT '用戶名',
  `age` int DEFAULT NULL COMMENT '年齡',
  `email` varchar(100) DEFAULT NULL COMMENT '郵箱',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系統(tǒng)用戶表';

項目結(jié)構(gòu):在 Spring Boot 項目的 src/test/java 或一個獨立的 generator 模塊中創(chuàng)建代碼生成器類。

4.2 代碼生成器實現(xiàn) (CodeGenerator.java)

我們使用 FastAutoGenerator 的流式 API,并配置 Lombok、Rest 風(fēng)格 Controller、以及下劃線轉(zhuǎn)駝峰命名策略。

package com.example.generator;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;

public class CodeGenerator {

    // 數(shù)據(jù)庫連接信息
    private static final String URL = "jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "your_password";
    private static final String PARENT_PACKAGE = "com.example.demo";
    private static final String MODULE_NAME = "system";
    private static final String AUTHOR = "Manus AI";

    public static void main(String[] args) {
        FastAutoGenerator.create(URL, USERNAME, PASSWORD)
            // 1. 全局配置
            .globalConfig(builder -> {
                builder.author(AUTHOR) // 設(shè)置作者
                    .enableSwagger() // 開啟 Swagger 模式
                    .fileOverride() // 覆蓋已生成文件
                    .outputDir(System.getProperty("user.dir") + "/src/main/java"); // 指定輸出目錄
            })
            // 2. 包配置
            .packageConfig(builder -> {
                builder.parent(PARENT_PACKAGE) // 設(shè)置父包名
                    .moduleName(MODULE_NAME) // 設(shè)置父包模塊名 (com.example.demo.system)
                    .pathInfo(Collections.singletonMap(OutputFile.xml, 
                            System.getProperty("user.dir") + "/src/main/resources/mapper/" + MODULE_NAME)); // 設(shè)置 Mapper XML 輸出路徑
            })
            // 3. 策略配置
            .strategyConfig(builder -> {
                builder.addInclude("sys_user") // 設(shè)置需要生成的表名
                    .addTablePrefix("sys_") // 設(shè)置過濾表前綴
                    
                    // 3.1 Entity 策略
                    .entityBuilder()
                    .enableLombok() // 開啟 Lombok
                    .enableChainModel() // 開啟鏈?zhǔn)侥P?
                    .idType(IdType.AUTO) // 設(shè)置主鍵生成策略
                    .columnNaming(com.baomidou.mybatisplus.generator.config.rules.NamingStrategy.underline_to_camel) // 字段名下劃線轉(zhuǎn)駝峰
                    
                    // 3.2 Controller 策略
                    .controllerBuilder()
                    .enableRestStyle() // 開啟 @RestController
                    
                    // 3.3 Service 策略
                    .serviceBuilder()
                    .formatServiceFileName("%sService") // 格式化 Service 接口文件名稱
                    
                    // 3.4 Mapper 策略
                    .mapperBuilder()
                    .enableMapperAnnotation() // 開啟 @Mapper 注解
                    .enableBaseResultMap() // 啟用 BaseResultMap
                    .enableBaseColumnList(); // 啟用 BaseColumnList
            })
            // 4. 模板引擎配置 (使用 Freemarker)
            .templateEngine(new FreemarkerTemplateEngine()) 
            // 5. 執(zhí)行生成
            .execute();
    }
}

4.3 生成結(jié)果分析

執(zhí)行上述 main 方法后,代碼將生成到指定的輸出目錄,例如:

文件類型路徑描述
Entitycom.example.demo.system.entity.User.java包含 id, userName, age, email, createTime 屬性,并帶有 Lombok 注解。
Mappercom.example.demo.system.mapper.UserMapper.java繼承自 BaseMapper<User>,包含基礎(chǔ) CRUD 方法。
Mapper XMLsrc/main/resources/mapper/system/UserMapper.xml包含 BaseResultMap 和 BaseColumnList,以及基礎(chǔ) SQL 語句。
Servicecom.example.demo.system.service.UserService.java繼承自 IService<User>。
Service Implcom.example.demo.system.service.impl.UserServiceImpl.java繼承自 ServiceImpl<UserMapper, User>。
Controllercom.example.demo.system.controller.UserController.java帶有 @RestController 注解,包含基礎(chǔ)的 RESTful 接口。

5. 高級特性與最佳實踐

5.1 自定義模板

如果默認(rèn)生成的代碼不符合您的項目規(guī)范(例如需要自定義注釋、引入特定的父類或接口),可以通過自定義模板來實現(xiàn)。

  1. 獲取默認(rèn)模板:從 mybatis-plus-generator 的源碼中獲取默認(rèn)的模板文件(如 entity.java.ftl)。
  2. 修改模板:將模板文件拷貝到項目的 src/main/resources/templates 目錄下,并根據(jù)需求修改其中的內(nèi)容。
  3. 配置模板路徑:在 FastAutoGenerator 中通過 templateConfig 指定自定義模板的路徑。
// 示例:配置自定義 Entity 模板
.templateConfig(builder -> {
    builder.entity("templates/my_entity.java"); // 使用自定義模板
})

5.2 字段類型處理

MyBatis-Plus 提供了靈活的字段類型處理機(jī)制,例如將數(shù)據(jù)庫的 datetime 映射為 Java 8 的 LocalDateTime。

// 在 GlobalConfig 中設(shè)置時間類型策略
.globalConfig(builder -> {
    // ... 其他配置
    builder.dateType(com.baomidou.mybatisplus.generator.config.rules.DateType.TIME_PACK); // 映射為 LocalDateTime
})

5.3 排除公共字段

如果您的實體類繼承了一個包含公共字段(如 id, create_time, update_time)的基類 (BaseEntity),您可以在策略配置中排除這些字段,避免重復(fù)生成。

.strategyConfig(builder -> {
    // ... 其他配置
    builder.entityBuilder()
        .superClass("com.example.BaseEntity") // 設(shè)置父類
        .addSuperEntityColumns("id", "create_time", "update_time"); // 排除父類已有的字段
})

6. 結(jié)論

MyBatis-Plus 代碼生成器(AutoGenerator)是 Java 后端開發(fā)中不可多得的效率工具。通過掌握其 3.5.1+ 版本引入的 FastAutoGenerator 流式配置 API,開發(fā)者可以輕松實現(xiàn)代碼的自動化生成,將更多精力聚焦于核心業(yè)務(wù)邏輯的創(chuàng)新與實現(xiàn),從而顯著提升項目的開發(fā)速度和代碼質(zhì)量。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 從原理到最佳實踐詳解SpringBoot如何實現(xiàn)優(yōu)雅停機(jī)

    從原理到最佳實踐詳解SpringBoot如何實現(xiàn)優(yōu)雅停機(jī)

    優(yōu)雅停機(jī)在現(xiàn)代微服務(wù)架構(gòu)中是非常重要的,它幫助我們確保在應(yīng)用程序停止時,不會中斷正在進(jìn)行的請求或?qū)е聰?shù)據(jù)丟失,下面我們就來看看SpringBoot實現(xiàn)優(yōu)雅停機(jī)的具體方法吧
    2026-03-03
  • Spring Cloud Gateway替代zuul作為API網(wǎng)關(guān)的方法

    Spring Cloud Gateway替代zuul作為API網(wǎng)關(guān)的方法

    本文簡要介紹如何使用Spring Cloud Gateway 作為API 網(wǎng)關(guān)(不是使用zuul作為網(wǎng)關(guān)),結(jié)合實例代碼給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • SpringBoot多環(huán)境配置踩坑指南

    SpringBoot多環(huán)境配置踩坑指南

    這篇文章主要為大家詳細(xì)介紹了SpringBoot多環(huán)境配置的相關(guān)方法和避坑指南,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-03-03
  • java實現(xiàn)Img與PDF相互轉(zhuǎn)換

    java實現(xiàn)Img與PDF相互轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)Img與PDF相互轉(zhuǎn)換的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 在Spring項目開發(fā)中Domain層的使用解析

    在Spring項目開發(fā)中Domain層的使用解析

    Domain是領(lǐng)域?qū)拥暮诵臄?shù)據(jù)載體,主要在領(lǐng)域?qū)觾?nèi)部及與Service層之間傳遞,用于封裝核心業(yè)務(wù)概念和規(guī)則,這篇文章給大家介紹在Spring項目開發(fā)中,Domain層的作用詳解,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • IDEA生成標(biāo)準(zhǔn)JavaBean的幾種方法總結(jié)

    IDEA生成標(biāo)準(zhǔn)JavaBean的幾種方法總結(jié)

    標(biāo)準(zhǔn)javaBean是定義一個類的標(biāo)準(zhǔn)結(jié)構(gòu),下面這篇文章主要給大家總結(jié)介紹了關(guān)于IDEA生成標(biāo)準(zhǔn)JavaBean的幾種方法,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Maven屬性與版本管理詳細(xì)步驟分解

    Maven屬性與版本管理詳細(xì)步驟分解

    這篇文章主要介紹了Maven中關(guān)于屬性與版本控制管理的步驟操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java實現(xiàn)級聯(lián)下拉結(jié)構(gòu)的示例代碼

    Java實現(xiàn)級聯(lián)下拉結(jié)構(gòu)的示例代碼

    在開發(fā)過程中,會遇到很多的實體需要將查出的數(shù)據(jù)處理為下拉或者級聯(lián)下拉的結(jié)構(gòu),提供給前端進(jìn)行展示。本文為大家介紹了java封裝下拉和級聯(lián)下拉的通用工具類,需要的可以參考一下
    2022-06-06
  • 解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry:問題

    解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry

    這篇文章主要介紹了解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry:問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • springboot使用mybatis一對多的關(guān)聯(lián)查詢問題記錄

    springboot使用mybatis一對多的關(guān)聯(lián)查詢問題記錄

    這篇文章主要介紹了springboot使用mybatis一對多的關(guān)聯(lián)查詢問題記錄,剛好最近有個需求需要做到關(guān)聯(lián)的查詢,時間也算充足,所以用sql來寫,于是踩了很久坑,終于跳出來了,小小記錄一下
    2022-01-01

最新評論

东乡| 扶绥县| 张家界市| 钦州市| 会东县| 武安市| 桐庐县| 洪泽县| 建昌县| 尉犁县| 广水市| 遵化市| 洞头县| 比如县| 浑源县| 天门市| 五指山市| 凉山| 西畴县| 兴化市| 云浮市| 庆城县| 喀喇沁旗| 雅江县| 东宁县| 游戏| 阿鲁科尔沁旗| 江山市| 洱源县| 乌恰县| 新巴尔虎右旗| 昭通市| 东莞市| 昌宁县| 恩平市| 台江县| 安塞县| 沙雅县| 湄潭县| 壤塘县| 潼关县|