SpringBoot集成MyBatis-Plus代碼生成器(V3.5.1) 1.說明 2.Maven依賴 3.快速生成代碼 4.生成的代碼 5.配置說明 6.參考文章

1.說明

MyBatis-Plus在3.5.1版本之後,
改變了代碼生成器的用法,
由於對歷史版本的不兼容,
這次重新梳理一份新的用法。
3.5.1版本之前的代碼生成器請參考:
SpringBoot集成MyBatis-Plus代碼生成器
SpringBoot集成MyBatis-Plus代碼生成器(Dao)

2.Maven依賴

完整的pom.xml如下:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.yuwen.spring</groupId>
        <artifactId>database</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>mybatis-plus-code-generater-v3.5.1</artifactId>
    <description>MyBatis Plus代碼生成器使用Demo,3.5.1版本之後的生成方式</description>
    
    <properties>
        <spring-boot.version>2.3.1.RELEASE</spring-boot.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--spring boot dependencies -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- Mybatis-Plus start MyBatis-Plus代碼生成器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.4.3</version>
        </dependency>
        <!-- Mybatis-Plus end -->

        <!-- Log4j2 start 日誌框架 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <!-- Log4j2 end -->
    </dependencies>

</project>

3.快速生成代碼

完整的CodeGenerator如下:

package com.yuwen.spring.uitl.generate;

import java.util.Collections;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;

/**
 * 
 * 代碼生成器 ,先修改下面的常量配置參數,然後執行 main方法
 */
public class CodeGenerator {

    // 數據庫連接配置
    private static final String JDBC_URL = "jdbc:mysql://11.12.13.14:3306/demodb?useUnicode=true&useSSL=false&characterEncoding=utf8";
    private static final String JDBC_USER_NAME = "demo";
    private static final String JDBC_PASSOWRD = "demo123456";

    // 包名和模塊名
    private static final String PACKAGE_NAME = "com.example";
    private static final String MODULE_NAME = "demo";

    // 表名,多個表使用英文逗號分割
    private static final String[] TBL_NAMES = { "tbl_user", "tbl_role" };

    // 表名的前綴,從表生成代碼時會去掉前綴
    private static final String TABLE_PREFIX = "tbl_";

    // 生成代碼入口main方法
    public static void main(String[] args) {
        // 1.數據庫配置
        DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(JDBC_URL, JDBC_USER_NAME,
                JDBC_PASSOWRD).dbQuery(new MySqlQuery()).typeConvert(new MySqlTypeConvert())
                        .keyWordsHandler(new MySqlKeyWordsHandler());

        // 1.1.快速生成器
        FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(dataSourceConfigBuilder);

        // 2.全局配置
        // 覆蓋已生成文件
        // 不打開生成文件目錄
        // 指定輸出目錄,注意使用反斜槓\
        // 設置註釋的作者
        // 設置註釋的日期格式
        // 使用java8新的時間類型
        fastAutoGenerator.globalConfig(globalConfigBuilder -> globalConfigBuilder.fileOverride().disableOpenDir()
                .outputDir("src\\main\\java").author("yuwen").commentDate("yyyy-MM-dd").dateType(DateType.TIME_PACK));

        // 3.包配置
        // 設置父包名
        // 設置父包模塊名
        // 設置MVC下各個模塊的包名
        // 設置XML資源文件的目錄
        fastAutoGenerator.packageConfig(packageConfigBuilder -> packageConfigBuilder.parent(PACKAGE_NAME)
                .moduleName(MODULE_NAME).entity("entity").mapper("dao").service("service").serviceImpl("service.impl")
                .controller("controller").other("other")
                .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "src\\main\\resources\\mapper")));

        // 4.模板配置
        // 使用Freemarker引擎模板,默認的是Velocity引擎模板
        AbstractTemplateEngine templateEngine = new FreemarkerTemplateEngine();
        fastAutoGenerator.templateEngine(templateEngine);

        // 5.注入配置 TODO

        // 6.策略配置
        // 設置需要生成的表名
        // 設置過濾表前綴
        fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.enableCapitalMode()
                .enableSkipView().disableSqlFilter().addInclude(TBL_NAMES).addTablePrefix(TABLE_PREFIX));

        // 6.1.Entity策略配置
        // 生成實體時生成字段的註解,包括@TableId註解等
        // 數據庫表和字段映射到實體的命名策略,爲下劃線轉駝峯
        // 全局主鍵類型爲None
        // 實體名稱格式化爲XXXEntity
        fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.entityBuilder()
                .enableTableFieldAnnotation().naming(NamingStrategy.underline_to_camel)
                .columnNaming(NamingStrategy.underline_to_camel).idType(IdType.NONE).formatFileName("%sEntity"));

        // 6.2.Controller策略配置
        // 開啓生成@RestController控制器
        fastAutoGenerator
                .strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder().enableRestStyle());

        // 6.3.Service策略配置
        // 格式化service接口和實現類的文件名稱,去掉默認的ServiceName前面的I
        fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.serviceBuilder()
                .formatServiceFileName("%sService").formatServiceImplFileName("%sServiceImpl"));

        // 6.4.Mapper策略配置
        // 格式化 mapper文件名,格式化xml實現類文件名稱
        fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.mapperBuilder()
                .formatMapperFileName("%sDao").formatXmlFileName("%sDao"));

        // 7.生成代碼
        fastAutoGenerator.execute();
    }

}

4.生成的代碼

通過連接MySQL數據庫,
生成對應的代碼框架如下:


5.配置說明

5.1.數據庫配置(DataSourceConfig)

5.1.1.基礎配置

屬性 說明 示例
url jdbc路徑 jdbc:mysql://127.0.0.1:3306/mybatis-plus
username 數據庫賬號 root
password 數據庫密碼 123456
new DataSourceConfig.
    Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456").build();

5.1.2.可選配置

方法 說明 示例
dbQuery(IDbQuery) 數據庫查詢 new MySqlQuery()
schema(String) 數據庫schema(部分數據庫適用) mybatis-plus
typeConvert(ITypeConvert) 數據庫類型轉換器 new MySqlTypeConvert()
keyWordsHandler(IKeyWordsHandler) 數據庫關鍵字處理器 new MySqlKeyWordsHandler()
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
    .dbQuery(new MySqlQuery())
    .schema("mybatis-plus")
    .typeConvert(new MySqlTypeConvert())
    .keyWordsHandler(new MySqlKeyWordsHandler())
    .build();

5.2.全局配置(GlobalConfig)

方法 說明 示例
fileOverride 覆蓋已生成文件 默認值:false
disableOpenDir 禁止打開輸出目錄 默認值:true
outputDir(String) 指定輸出目錄 /opt/baomidou/ 默認值: windows:D:// linux or mac : /tmp
author(String) 作者名 baomidou 默認值:作者
enableKotlin 開啓 kotlin 模式 默認值:false
enableSwagger 開啓 swagger 模式 默認值:false
dateType(DateType) 時間策略 DateType.ONLY_DATE 默認值: DateType.TIME_PACK
commentDate(String) 註釋日期 默認值: yyyy-MM-dd
new GlobalConfig.Builder()
    .fileOverride()
    .outputDir("/opt/baomidou")
    .author("baomidou")
    .enableKotlin()
    .enableSwagger()
    .dateType(DateType.TIME_PACK)
    .commentDate("yyyy-MM-dd")
    .build();

5.3.包配置(PackageConfig)

方法 說明 示例
parent(String) 父包名 默認值:com.baomidou
moduleName(String) 父包模塊名 默認值:無
entity(String) Entity 包名 默認值:entity
service(String) Service 包名 默認值:service
serviceImpl(String) Service Impl 包名 默認值:service.impl
mapper(String) Mapper 包名 默認值:mapper
mapperXml(String) Mapper XML 包名 默認值:mapper.xml
controller(String) Controller 包名 默認值:controller
other(String) 自定義文件包名 輸出自定義文件時所用到的包名
pathInfo(Map<OutputFile, String>) 路徑配置信息 Collections.singletonMap(OutputFile.mapperXml, "D://")
new PackageConfig.Builder()
    .parent("com.baomidou.mybatisplus.samples.generator")
    .moduleName("sys")
    .entity("po")
    .service("service")
    .serviceImpl("service.impl")
    .mapper("mapper")
    .mapperXml("mapper.xml")
    .controller("controller")
    .other("other")
    .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://")
    .build();

5.4.模板配置(TemplateConfig)

方法 說明 示例
disable 禁用所有模板
disable(TemplateType...) 禁用模板 TemplateType.ENTITY
entity(String) 設置實體模板路徑(JAVA) /templates/entity.java
entityKt(String) 設置實體模板路徑(kotlin) /templates/entity.java
service(String) 設置 service 模板路徑 /templates/service.java
serviceImpl(String) 設置 serviceImpl 模板路徑 /templates/serviceImpl.java
mapper(String) 設置 mapper 模板路徑 /templates/mapper.java
mapperXml(String) 設置 mapperXml 模板路徑 /templates/mapper.xml
controller(String) 設置 controller 模板路徑 /templates/controller.java
new TemplateConfig.Builder()
    .disable(TemplateType.ENTITY)
    .entity("/templates/entity.java")
    .service("/templates/service.java")
    .serviceImpl("/templates/serviceImpl.java")
    .mapper("/templates/mapper.java")
    .mapperXml("/templates/mapper.xml")
    .controller("/templates/controller.java")
    .build();

5.5.注入配置(InjectionConfig)

方法 說明 示例
beforeOutputFile(BiConsumer<TableInfo, Map<String, Object>>) 輸出文件之前消費者
customMap(Map<String, Object>) 自定義配置 Map 對象 Collections.singletonMap("test", "baomidou")
customFile(Map<String, String>) 自定義配置模板文件 Collections.singletonMap("test.txt", "/templates/test.vm")
new InjectionConfig.Builder()
    .beforeOutputFile((tableInfo, objectMap) -> {
    System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
    })
    .customMap(Collections.singletonMap("test", "baomidou"))
    .customFile(Collections.singletonMap("test.txt", "/templates/test.vm"))
    .build();

5.6.策略配置(StrategyConfig)

方法 說明 示例
enableCapitalMode 開啓大寫命名 默認值:false
enableSkipView 開啓跳過視圖 默認值:false
disableSqlFilter 禁用 sql 過濾 默認值:true,語法不能支持使用 sql 過濾表的話,可以考慮關閉此開關
enableSchema 啓用 schema 默認值:false,多 schema 場景的時候打開
likeTable(LikeTable) 模糊表匹配(sql 過濾) likeTable 與 notLikeTable 只能配置一項
notLikeTable(LikeTable) 模糊表排除(sql 過濾) likeTable 與 notLikeTable 只能配置一項
addInclude(String...) 增加表匹配(內存過濾) include 與 exclude 只能配置一項
addExclude(String...) 增加表排除匹配(內存過濾) include 與 exclude 只能配置一項
addTablePrefix(String...) 增加過濾表前綴
addTableSuffix(String...) 增加過濾表後綴
addFieldPrefix(String...) 增加過濾字段前綴
addFieldSuffix(String...) 增加過濾字段後綴
entityBuilder 實體策略配置
controllerBuilder controller 策略配置
mapperBuilder mapper 策略配置
serviceBuilder service 策略配置
new StrategyConfig.Builder()
    .enableCapitalMode()
    .enableSkipView()
    .disableSqlFilter()
    .likeTable(new LikeTable("USER"))
    .addInclude("t_simple")
    .addTablePrefix("t_", "c_")
    .addFieldSuffix("_flag")
    .build();

5.6.1.Entity策略配置

方法 說明 示例
nameConvert(INameConvert) 名稱轉換實現
superClass(Class<?>) 設置父類 BaseEntity.class
superClass(String) 設置父類 com.baomidou.global.BaseEntity
disableSerialVersionUID 禁用生成 serialVersionUID 默認值:true
enableColumnConstant 開啓生成字段常量 默認值:false
enableChainModel 開啓鏈式模型 默認值:false
enableLombok 開啓 lombok 模型 默認值:false
enableRemoveIsPrefix 開啓 Boolean 類型字段移除 is 前綴 默認值:false
enableTableFieldAnnotationEnable 開啓生成實體時生成字段註解 默認值:false
enableActiveRecord 開啓 ActiveRecord 模型 默認值:false
versionColumnName(String) 樂觀鎖字段名(數據庫)
versionPropertyName(String) 樂觀鎖屬性名(實體)
logicDeleteColumnName(String) 邏輯刪除字段名(數據庫)
logicDeletePropertyName(String) 邏輯刪除屬性名(實體)
naming 數據庫表映射到實體的命名策略 默認下劃線轉駝峯命名:NamingStrategy.underline_to_camel
columnNaming 數據庫表字段映射到實體的命名策略 默認爲 null,未指定按照 naming 執行
addSuperEntityColumns(String...) 添加父類公共字段
addIgnoreColumns(String...) 添加忽略字段
addTableFills(IFill...) 添加表字段填充
addTableFills(List<IFill>) 添加表字段填充
idType(IdType) 全局主鍵類型
convertFileName(ConverterFileName) 轉換文件名稱
formatFileName(String) 格式化文件名稱
new StrategyConfig.Builder()
    .entityBuilder()
    .superClass(BaseEntity.class)
    .disableSerialVersionUID()
    .enableChainModel()
    .enableLombok()
    .enableRemoveIsPrefix()
    .enableTableFieldAnnotation()
    .enableActiveRecord()
    .versionColumnName("version")
    .versionPropertyName("version")
    .logicDeleteColumnName("deleted")
    .logicDeletePropertyName("deleteFlag")
    .naming(NamingStrategy.no_change)
    .columnNaming(NamingStrategy.underline_to_camel)
    .addSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time")
    .addIgnoreColumns("age")
    .addTableFills(new Column("create_time", FieldFill.INSERT))
    .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
    .idType(IdType.AUTO)
    .formatFileName("%sEntity")
    .build();

5.6.2.Controller策略配置

方法 說明 示例
superClass(Class<?>) 設置父類 BaseController.class
superClass(String) 設置父類 com.baomidou.global.BaseController
enableHyphenStyle 開啓駝峯轉連字符 默認值:false
enableRestStyle 開啓生成@RestController 控制器 默認值:false
convertFileName(ConverterFileName) 轉換文件名稱
formatFileName(String) 格式化文件名稱
new StrategyConfig.Builder()
    .controllerBuilder()
    .superClass(BaseController.class)
    .enableHyphenStyle()
    .enableRestStyle()
    .formatFileName("%sAction")
    .build();

5.6.3.Service策略配置

方法 說明 示例
superServiceClass(Class<?>) 設置 service 接口父類 BaseService.class
superServiceClass(String) 設置 service 接口父類 com.baomidou.global.BaseService
superServiceImplClass(Class<?>) 設置 service 實現類父類 BaseServiceImpl.class
superServiceImplClass(String) 設置 service 實現類父類 com.baomidou.global.BaseServiceImpl
convertServiceFileName(ConverterFileName) 轉換 service 接口文件名稱
convertServiceImplFileName(ConverterFileName) 轉換 service 實現類文件名稱
formatServiceFileName(String) 格式化 service 接口文件名稱
formatServiceImplFileName(String) 格式化 service 實現類文件名稱
new StrategyConfig.Builder()
    .serviceBuilder()
    .superServiceClass(BaseService.class)
    .superServiceImplClass(BaseServiceImpl.class)
    .formatServiceFileName("%sService")
    .formatServiceImplFileName("%sServiceImp")
    .build();

5.6.4.Mapper策略配置

方法 說明 示例
superClass(Class<?>) 設置父類 BaseMapper.class
superClass(String) 設置父類 com.baomidou.global.BaseMapper
enableMapperAnnotation 開啓 @Mapper 註解 默認值:false
enableBaseResultMap 啓用 BaseResultMap 生成 默認值:false
enableBaseColumnList 啓用 BaseColumnList 默認值:false
cache(Class<? extends Cache>) 設置緩存實現類 MyMapperCache.class
convertMapperFileName(ConverterFileName) 轉換 mapper 類文件名稱
convertXmlFileName(ConverterFileName) 轉換 xml 文件名稱
formatMapperFileName(String) 格式化 mapper 文件名稱
formatXmlFileName(String) 格式化 xml 實現類文件名稱
new StrategyConfig.Builder()
    .mapperBuilder()
    .superClass(BaseMapper.class)
    .enableMapperAnnotation()
    .enableBaseResultMap()
    .enableBaseColumnList()
    .cache(MyMapperCache.class)
    .formatMapperFileName("%sDao")
    .formatXmlFileName("%sXml")
    .build();

6.參考文章

MyBatis-Plus 代碼生成器(3.5.1+版本)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章