SpringBoot集成Mybatis-Plus最新代码自动生成器v3.5.1

一、概述


官方原话
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率

配置环境

  • 开发工具 IDEA
  • JDK 15
  • 数据库Mysql
  • 基于SpringBoot开发框架

二、导入依赖


    <!--使用Controller注解需要使用-->
    <dependencies>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <!--Lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--自动生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--pagehelper分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.3.2</version>
        </dependency>
        <!--velocity模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        <!--freemarker模板引擎-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.29</version>
        </dependency>
        <!--springboot测试类-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--Swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
    </dependencies>

三、运行类(放在测试类中即可)


package com.vinjcent;

import com.baomidou.mybatisplus.annotation.FieldFill;
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.TemplateType;
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.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;

// 代码自动生成器
public class Generator {
    // 数据库连接字段配置
    private static final String JDBC_URL = "jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSl=true";
    private static final String JDBC_USER_NAME = "root";
    private static final String JDBC_PASSWORD = "123456";

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

    // 表名,多个表使用英文逗号分割
    private static final String[] TBL_NAMES = {"student", "subject", "sheet"};

    // 表名的前缀,从表生成代码时会去掉前缀
    private static final String TABLE_PREFIX = "tbl_";


    public static void main(String[] args) {

        //获取当前工程路径(这里无需修改)
        String projectPath = System.getProperty("user.dir");


        /**
         * 1.数据库配置(设置数据源)
            配置数据库连接以及需要使用的字段
         */
        DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(JDBC_URL, JDBC_USER_NAME,
                JDBC_PASSWORD)
                .dbQuery(new MySqlQuery())
                .typeConvert(new MySqlTypeConvert())
                .keyWordsHandler(new MySqlKeyWordsHandler());


        FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(dataSourceConfigBuilder);


        /**
         * 2.全局配置
         */
        fastAutoGenerator.globalConfig(
                globalConfigBuilder -> globalConfigBuilder
                        .fileOverride()     // 覆盖已生成文件
                        .disableOpenDir()   // 不打开生成文件目录
                        .outputDir(projectPath + "/src/main/java") // 指定输出目录,注意斜杠的表示
                        .author("vinjcent") // 设置注释的作者
                        .commentDate("yyyy-MM-dd HH:mm:ss") // 设置注释的日期格式
                        .dateType(DateType.TIME_PACK)   // 使用java8新的时间类型
                        .enableSwagger()    // 开启swagger文档
        );

        /**
         日期类型 DateType
         DateType.ONLY_DATE 使用 java.util.date包下的 Date
         DateType.SQL_PACK 使用 java.sql包下的 Date
         DateType.TIME_PACK   因为会使用 java.time.LocalDateTime jdk1.8以上才支持  (推荐使用)
         */


        /**
         * 3.包配置
         */
        fastAutoGenerator.packageConfig(
                packageConfigBuilder -> packageConfigBuilder
                        .parent(PACKAGE_NAME)   // 设置父包名
                        // .moduleName(MODULE_NAME) // 设置父包模块名
                        .entity("pojo") // 设置MVC下各个模块的包名
                        .mapper("dao")
                        .service("service")
                        .serviceImpl("service.impl")
                        .controller("controller")
                        .xml("dao.xml") // 设置XML资源文件的目录
                        .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + SERVICE_PROJECT_PATH + "\\src\\main" + XML_OUTPUT_PATH))// 设置XML资源文件的目录

        );

        /**
         * 4.模板配置(第五部分会说明)
         */
        /*
        fastAutoGenerator.templateConfig(
                templateConfigBuilder -> templateConfigBuilder
                        .disable(TemplateType.ENTITY)   // 禁用模板
                        .entity("/templates/entity.java")   // 设置实体模板路径(JAVA)
                        .service("/templates/service.java") // 设置service模板路径
                        .serviceImpl("/templates/serviceImpl.java") // 设置serviceImpl模板路径
                        .mapper("/templates/mapper.java")   // 设置mapper模板路径
                        .xml("/templates/mapper.xml")   // 设置mapperXml模板路径
                        .controller("/templates/controller.java")   // 设置controller模板路径
        );
        */

        /**
         * 5.注入配置 TODO
         */


        /**
         * 6.策略配置
         */
        fastAutoGenerator.strategyConfig(
                strategyConfigBuilder -> strategyConfigBuilder
                        .enableCapitalMode()    // 开启大写命名
                        .enableSkipView()   // 开启跳过视图
                        .disableSqlFilter() // 禁用sql过滤
                        .addInclude(TBL_NAMES)  // 设置需要生成的表名
                        .addTablePrefix(TABLE_PREFIX)   // 设置过滤表前缀
        );


        /**
         * 6.1 Entity策略配置
         */
        fastAutoGenerator.strategyConfig(
                strategyConfigBuilder -> strategyConfigBuilder.entityBuilder()
                        .enableTableFieldAnnotation()   // 生成实体时生成字段的注解,包括@TableId注解等---
                        .naming(NamingStrategy.underline_to_camel)  // 数据库表和字段映射到实体的命名策略,为下划线转驼峰
                        .columnNaming(NamingStrategy.underline_to_camel)
                        .idType(IdType.AUTO)    // 全局主键类型为AUTO(自增)
                        .enableLombok() // 支持lombok开启注解
                        .logicDeleteColumnName("deleted")   // 逻辑删除字段名(数据库)
                        .logicDeletePropertyName("deleted") // 逻辑删除属性名(实体)
                        .addTableFills(new Column("create_time", FieldFill.INSERT)) // 自动填充配置  create_time  update_time 两种方式
                        .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
                        .versionColumnName("version")   // 开启乐观锁
                        .disableSerialVersionUID()  // 禁用生成 serialVersionUID,默认值:true
                        .enableChainModel() // 开启实体类链式编程
                        .formatFileName("%sEntity") // 实体名称格式化为XXXEntity   formatFileName("%sEntity")
        );

        /**
         * 6.2 Controller策略配置
         */
        fastAutoGenerator.strategyConfig(
        		strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder()
                        .enableRestStyle()  // 开启生成@RestController控制器
                        .enableHyphenStyle()    // 开启驼峰转连字符 localhost:8080/hello_id_2
                );

        /**
         * 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()
                        .enableMapperAnnotation()   // 开启 @Mapper 注解
                        .formatMapperFileName("%sMapper")
                        .formatXmlFileName("%sMapper"));

        /** 7.生成代码
         *
         */
        // fastAutoGenerator.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
        fastAutoGenerator.execute();

    }
}


结果
在这里插入图片描述

四、配置说明


4.1 数据库配置(DataSourceConfig)

基础配置

属性说明示例
urljdbc路径jdbc:mysql://localhost:3306/(数据库名称)
username数据库账号root
password数据库密码123456

可选配置

方法说明示例 / 参数
dbQuery(IDbQuery)数据库查询new MySqlQuery()
schema(String)数据库 schema(部分数据库适用)mybatis-plus
typeConvert(ITypeConvert)数据库类型转换器new MySqlTypeConvert()
keyWordsHandler(IKeyWordsHandler)数据库关键字处理器new MySqlKeyWordsHandler()

4.2 全局配置(GlobalConfig)

方法说明示例 / 参数
fileOverride覆盖已生成文件默认值:false
disableOpenDir禁止打开输出目录默认值:true
outputDir(String)指定输出目录projectPath + “/src/main/java”(当前工程路径+"/src/main/java")
author(String)作者名vinjcent
enableKotlin开启 kotlin 模式默认值:false
enableSwagger开启 swagger 模式默认值:false
dateType(DateType)时间类型ONLY_DATE、SQL_PACK、TIME_PACK(jdk1.8以上才支持,推荐使用)
commentDate(String)注释日期默认值:yyyy-MM-dd,可使用"“yyyy-MM-dd HH:mm:ss”"

4.3 包配置(PackageConfig)

方法说明示例 / 参数
parent(String)父包名默认值:com.vinjcent
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)自定义文件包名可使用"other",生产一个other文件目录
pathInfo(Map<OutputFile, String>)路径配置信息Collections.singletonMap(OutputFile.mapperXml, “D://”)

4.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

4.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”)

4.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…)增加过滤表前缀
addTablePrefix(String…)增加过滤表前缀
addTableSuffix(String…)增加过滤表后缀
addFieldPrefix(String…)增加过滤字段前缀
addFieldSuffix(String…)增加过滤字段后缀
entityBuilder实体策略配置
controllerBuildercontroller 策略配置
mapperBuildermapper 策略配置
serviceBuilderservice 策略配置

4.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
enableTableFieldAnnotation开启生成实体时生成字段注解默认值: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)添加表字段填充
idType(IdType)全局主键类型
convertFileName(ConverterFileName)转换文件名称
formatFileName(String)格式化文件名称

4.6.2 Controller 策略配置

方法说明示例 / 参数
superClass(Class<?>)设置父类BaseController.class
superClass(String)设置父类com.baomidou.global.BaseController
enableHyphenStyle开启驼峰转连字符默认值:false
enableRestStyle开启生成@RestController 控制器默认值:false
convertFileName(ConverterFileName)转换文件名称
formatFileName(String)格式化文件名称

4.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 实现类文件名称

4.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 实现类文件名称

注意
使用时,先看清楚归于哪一类的配置,避免出现找不到的情况!

五、使用自定义格式输出文件(FreeMarkerTemplate模板引擎)



package com.vinjcent.myabtis;

import com.baomidou.mybatisplus.annotation.FieldFill;
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.InjectionConfig;
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.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;

import java.util.Collections;

// 代码自动生成器
public class Generator {
    // 数据库连接字段配置
    private static final String JDBC_URL = "jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSl=true";
    private static final String JDBC_USER_NAME = "root";
    private static final String JDBC_PASSWORD = "123456";

    // 父工程名
    private static final String PROJECT_PATH = "/com-common-service";

    // 包名和模块名
    private static final String PACKAGE_NAME = "/com/vinjcent";
    private static final String SERVICE_PROJECT_PATH = "/com-mybatis";

    // 表名,多个表使用英文逗号分割
    private static final String[] TBL_NAMES = {"tbl_employee"};

    // 表名的前缀,从表生成代码时会去掉前缀
    private static final String TABLE_PREFIX = "tbl_";
    /**
     * 服务模块名称
     */

    // 各层包名
    private static final String ENTITY_PATH = "/domain/entity/";
    private static final String MAPPER_PATH = "/mapper/";
    private static final String XML_PATH = "/resources/mybatis/mapper/";
    private static final String SERVICE_PATH = "/service/";
    private static final String SERVICE_IMPL_PATH = "/service/impl/";
    private static final String CONTROLLER_PATH = "/controller/";

    // 各层文件输出到模块, 没有则置空
    /**
     * Entity.java, Mapper.java, Mapper.xml输出模块路径
     */
    private static final String MAPPER_OUTPUT_MODULE = "module";
    /**
     * mapper.xml输出模块路径(需要注意放置的位置:默认从模块/src/main下开始)
     */
    private static final String XML_OUTPUT_MODULE = "module";
    /**
     * IService.java, serviceImpl.java输出模块路径
     */
    private static final String SERVICE_OUTPUT_MODULE = "module";
    /**
     * Controller.java输出模块路径
     */
    private static final String CONTROLLER_OUTPUT_MODULE = "module";

    // 自定义输出模板和位置
    // 文件位置输出模式: file output path = projectPath + XX_PATH  + XX_OUTPUT_MODULE
    /**
     * entity输出模板
     */
    private static final String ENTITY_TEMPLATE = "templates/entity.java";
    private static final String ENTITY_OUTPUT_PATH = ENTITY_PATH + MAPPER_OUTPUT_MODULE;
    /**
     * mapper.xml输出模板
     */
    private static final String XML_TEMPLATE = "templates/mapper.xml";
    private static final String XML_OUTPUT_PATH = XML_PATH + XML_OUTPUT_MODULE;
    /**
     * mapper.java输出模板
     */
    private static final String MAPPER_TEMPLATE = "templates/mapper.java";
    private static final String MAPPER_OUTPUT_PATH = MAPPER_PATH + MAPPER_OUTPUT_MODULE;
    /**
     * service输出模板
     */
    private static final String SERVICE_TEMPLATE = "templates/service.java";
    private static final String SERVICE_OUTPUT_PATH = SERVICE_PATH + SERVICE_OUTPUT_MODULE;
    /**
     * serviceImpl输出模板
     */
    private static final String SERVICE_IMPL_TEMPLATE = "templates/serviceImpl.java";
    private static final String SERVICE_IMPL_OUTPUT_PATH = SERVICE_IMPL_PATH + SERVICE_OUTPUT_MODULE;
    /**
     * controller输出模板
     */
    private static final String CONTROLLER_TEMPLATE = "templates/controller.java";
    private static final String CONTROLLER_OUTPUT_PATH = CONTROLLER_PATH + CONTROLLER_OUTPUT_MODULE;

    public static void main(String[] args) {

        // 获取当前工程路径(这里无需修改)
        String projectPath = System.getProperty("user.dir");


        /**
         * 1.数据库配置(设置数据源)
         配置数据库连接以及需要使用的字段
         */
        DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(JDBC_URL, JDBC_USER_NAME,
                JDBC_PASSWORD)
                .dbQuery(new MySqlQuery())
                .typeConvert(new MySqlTypeConvert())
                .keyWordsHandler(new MySqlKeyWordsHandler());
        FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(dataSourceConfigBuilder);

        /**
         * 2.全局配置
         */
        fastAutoGenerator.globalConfig(
                globalConfigBuilder -> globalConfigBuilder
                        .fileOverride()     // 覆盖已生成文件
                        .disableOpenDir()   // 不打开生成文件目录
                        .outputDir(projectPath + SERVICE_PROJECT_PATH + "/src/main/java") // 指定输出目录,注意斜杠的表示
                        .author("vinjcent") // 设置注释的作者
                        .commentDate("yyyy-MM-dd HH:mm:ss") // 设置注释的日期格式
                        .dateType(DateType.TIME_PACK)   // 使用java8新的时间类型
                        .enableSwagger()    // 开启swagger文档
        );

        /**
         日期类型 DateType
         DateType.ONLY_DATE 使用 java.util.date包下的 Date
         DateType.SQL_PACK 使用 java.sql包下的 Date
         DateType.TIME_PACK   因为会使用 java.time.LocalDateTime jdk1.8以上才支持  (推荐使用)
         */


        /**
         * 3.包配置
         */
        fastAutoGenerator.packageConfig(
                packageConfigBuilder -> packageConfigBuilder
                        .parent(PACKAGE_NAME.replace('/', '.').substring(1))   // 设置父包名
                        // .moduleName(MODULE_NAME) // 设置父包模块名
                        .entity((ENTITY_OUTPUT_PATH).replace('/', '.').substring(1, (ENTITY_OUTPUT_PATH).length() - 1)) // 设置MVC下各个模块的包名
                        .mapper((MAPPER_OUTPUT_PATH).replace('/', '.').substring(1, (MAPPER_OUTPUT_PATH).length() - 1))
                        .service((SERVICE_OUTPUT_PATH).replace('/', '.').substring(1, (SERVICE_OUTPUT_PATH).length() - 1))
                        .serviceImpl((SERVICE_IMPL_OUTPUT_PATH).replace('/', '.').substring(1, (SERVICE_IMPL_OUTPUT_PATH).length() - 1))
                        .controller((CONTROLLER_OUTPUT_PATH).replace('/', '.').substring(1, (CONTROLLER_OUTPUT_PATH).length() - 1))
                        .xml("mapper")
                        .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + SERVICE_PROJECT_PATH + "\\src\\main" + XML_OUTPUT_PATH))// 设置XML资源文件的目录
        );

        /**
         * 4.模板配置
         */
        fastAutoGenerator.templateConfig(
                templateConfigBuilder -> templateConfigBuilder
                        // .disable(TemplateType.ENTITY)   // 禁用模板
                        // .disable(TemplateType.SERVICE)
                        // .disable(TemplateType.SERVICEIMPL)
                        // .disable(TemplateType.MAPPER)
                        // .disable(TemplateType.CONTROLLER)
                        // .disable(TemplateType.XML)
                        .entity(ENTITY_TEMPLATE)   // 设置实体模板路径(JAVA)
                        .service(SERVICE_TEMPLATE) // 设置service模板路径
                        .serviceImpl(SERVICE_IMPL_TEMPLATE) // 设置serviceImpl模板路径
                        .controller(CONTROLLER_TEMPLATE)   // 设置controller模板路径
                        .mapper(MAPPER_TEMPLATE)   // 设置mapper模板路径
                        .xml(XML_TEMPLATE)   // 设置mapperXml模板路径
        );

        /**
         * 5.注入配置 TODO
         */
        InjectionConfig config = new InjectionConfig();

        /**
         * 6.策略配置
         */
        fastAutoGenerator.strategyConfig(
                strategyConfigBuilder -> strategyConfigBuilder
                        .enableCapitalMode()    // 开启大写命名
                        .enableSkipView()   // 开启跳过视图
                        .disableSqlFilter() // 禁用sql过滤
                        .addInclude(TBL_NAMES)  // 设置需要生成的表名
                        .addTablePrefix(TABLE_PREFIX)   // 设置过滤表前缀
        );

        /**
         * 6.1 Entity策略配置
         */
        fastAutoGenerator.strategyConfig(
                strategyConfigBuilder -> strategyConfigBuilder.entityBuilder()
                        .enableTableFieldAnnotation()   // 生成实体时生成字段的注解,包括@TableId注解等---
                        .naming(NamingStrategy.underline_to_camel)  // 数据库表和字段映射到实体的命名策略,为下划线转驼峰
                        .columnNaming(NamingStrategy.underline_to_camel)
                        .idType(IdType.AUTO)    // 全局主键类型为AUTO(自增)
                        .enableLombok() // 支持lombok开启注解
                        .logicDeleteColumnName("deleted")   // 逻辑删除字段名(数据库)
                        .logicDeletePropertyName("deleted") // 逻辑删除属性名(实体)
                        .addTableFills(new Column("create_time", FieldFill.INSERT)) // 自动填充配置  create_time  update_time 两种方式
                        .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
                        .versionColumnName("version")   // 开启乐观锁
                        .disableSerialVersionUID()  // 禁用生成 serialVersionUID,默认值:true
                        .enableChainModel() // 开启实体类链式编程
                        .formatFileName("%s") // 实体名称格式化为XXX
        );

        /**
         * 6.2 Controller策略配置
         */
        fastAutoGenerator.strategyConfig(
                strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder()
                        .enableRestStyle()  // 开启生成@RestController控制器
                        .enableHyphenStyle()    // 开启驼峰转连字符 localhost:8080/hello_id_2
        );

        /**
         * 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()
                        .enableMapperAnnotation()   // 开启 @Mapper 注解
                        .formatMapperFileName("%sMapper")
                        .formatXmlFileName("%sMapper"));

        /** 7.生成代码
         *
         */
        // 使用Freemarker引擎模板,默认的是Velocity引擎模板
        fastAutoGenerator.templateEngine(new FreemarkerTemplateEngine());
        fastAutoGenerator.execute();

    }
}

5.1 存放模板文件位置如下

在这里插入图片描述
需要模板文件的可以后台发我消息