SpringBoot集成MyBatis-Plus代码生成器(V3.5.1)

SpringBoot集成MyBatis-Plus代码生成器(V3.5.1),第1张

SpringBoot集成MyBatis-Plus代码生成器(V3.5.1) 1.说明

MyBatis-Plus在3.5.1版本之后,
改变了代码生成器的用法,
由于对历史版本的不兼容,
这次重新梳理一份新的用法。
3.5.1版本之前的代码生成器请参考:SpringBoot集成MyBatis-Plus代码生成器SpringBoot集成MyBatis-Plus代码生成器(Dao)

2.Maven依赖

完整的pom.xml如下:


    4.0.0
    
        com.yuwen.spring
        database
        0.0.1-SNAPSHOT
    
    mybatis-plus-code-generater-v3.5.1
    MyBatis Plus代码生成器使用Demo,3.5.1版本之后的生成方式
    
    
        2.3.1.RELEASE
    

    
        
            
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
        
    
    
    
        
            org.springframework
            spring-web
        

        
            mysql
            mysql-connector-java
            runtime
        

        
        
            com.baomidou
            mybatis-plus-generator
            3.5.1
        
        
            org.freemarker
            freemarker
        
        
            com.baomidou
            mybatis-plus-extension
            3.4.3
        
        

        
        
            org.springframework.boot
            spring-boot-starter
            
                
                    org.springframework.boot
                    spring-boot-starter-logging
                
            
        
        
            org.springframework.boot
            spring-boot-starter-log4j2
        
        
    

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;


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.基础配置 属性说明示例urljdbc路径jdbc:mysql://127.0.0.1:3306/mybatis-plus username数据库账号rootpassword数据库密码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-plustypeConvert(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覆盖已生成文件默认值:falsedisableOpenDir禁止打开输出目录默认值:trueoutputDir(String)指定输出目录/opt/baomidou/ 默认值: windows:D:// linux or mac : /tmpauthor(String)作者名baomidou 默认值:作者enableKotlin开启 kotlin 模式默认值:falseenableSwagger开启 swagger 模式默认值:falsedateType(DateType)时间策略DateType.ONLY_DATE 默认值: DateType.TIME_PACKcommentDate(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.baomidoumoduleName(String)父包模块名默认值:无entity(String)Entity 包名默认值:entityservice(String)Service 包名默认值:serviceserviceImpl(String)Service Impl 包名默认值:service.implmapper(String)Mapper 包名默认值:mappermapperXml(String)Mapper XML 包名默认值:mapper.xmlcontroller(String)Controller 包名默认值:controllerother(String)自定义文件包名输出自定义文件时所用到的包名pathInfo(Map)路径配置信息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.ENTITYentity(String)设置实体模板路径(JAVA)/templates/entity.javaentityKt(String)设置实体模板路径(kotlin)/templates/entity.javaservice(String)设置 service 模板路径/templates/service.javaserviceImpl(String)设置 serviceImpl 模板路径/templates/serviceImpl.javamapper(String)设置 mapper 模板路径/templates/mapper.javamapperXml(String)设置 mapperXml 模板路径/templates/mapper.xmlcontroller(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>)输出文件之前消费者customMap(Map)自定义配置 Map 对象Collections.singletonMap("test", "baomidou")customFile(Map)自定义配置模板文件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开启大写命名默认值:falseenableSkipView开启跳过视图默认值:falsedisableSqlFilter禁用 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实体策略配置controllerBuildercontroller 策略配置mapperBuildermapper 策略配置serviceBuilderservice 策略配置
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.classsuperClass(String)设置父类com.baomidou.global.baseEntitydisableSerialVersionUID禁用生成 serialVersionUID默认值:trueenableColumnConstant开启生成字段常量默认值:falseenableChainModel开启链式模型默认值:falseenableLombok开启 lombok 模型默认值:falseenableRemoveIsPrefix开启 Boolean 类型字段移除 is 前缀默认值:falseenableTableFieldAnnotationEnable开启生成实体时生成字段注解默认值:falseenableActiveRecord开启 ActiveRecord 模型默认值:falseversionColumnName(String)乐观锁字段名(数据库)versionPropertyName(String)乐观锁属性名(实体)logicDeleteColumnName(String)逻辑删除字段名(数据库)logicDeletePropertyName(String)逻辑删除属性名(实体)naming数据库表映射到实体的命名策略默认下划线转驼峰命名:NamingStrategy.underline_to_camelcolumnNaming数据库表字段映射到实体的命名策略默认为 null,未指定按照 naming 执行addSuperEntityColumns(String...)添加父类公共字段addIgnoreColumns(String...)添加忽略字段addTableFills(IFill...)添加表字段填充addTableFills(List)添加表字段填充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.classsuperClass(String)设置父类com.baomidou.global.baseControllerenableHyphenStyle开启驼峰转连字符默认值:falseenableRestStyle开启生成@RestController 控制器默认值:falseconvertFileName(ConverterFileName)转换文件名称formatFileName(String)格式化文件名称
new StrategyConfig.Builder()
    .controllerBuilder()
    .superClass(baseController.class)
    .enableHyphenStyle()
    .enableRestStyle()
    .formatFileName("%sAction")
    .build();
5.6.3.Service策略配置 方法说明示例superServiceClass(Class)设置 service 接口父类baseService.classsuperServiceClass(String)设置 service 接口父类com.baomidou.global.baseServicesuperServiceImplClass(Class)设置 service 实现类父类baseServiceImpl.classsuperServiceImplClass(String)设置 service 实现类父类com.baomidou.global.baseServiceImplconvertServiceFileName(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.classsuperClass(String)设置父类com.baomidou.global.baseMapperenableMapperAnnotation开启 @Mapper 注解默认值:falseenablebaseResultMap启用 baseResultMap 生成默认值:falseenablebaseColumnList启用 baseColumnList默认值:falsecache(Class)设置缓存实现类MyMapperCache.classconvertMapperFileName(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+版本)

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5438588.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-11
下一篇2022-12-11

发表评论

登录后才能评论

评论列表(0条)

    保存