• MyBatis-plus 代码生成器配置


    数据库配置(DataSourceConfig)

    基础配置

    属性说明示例
    urljdbc 路径jdbc:mysql://127.0.0.1:3306/mybatis-plus
    username数据库账号root
    password数据库密码123456
    1. new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
    2. .build();

    可选配置

    方法说明示例
    dbQuery(IDbQuery)数据库查询new MySqlQuery(),只在SQLQuery下生效
    schema(String)数据库 schema(部分数据库适用)mybatis-plus
    typeConvert(ITypeConvert)数据库类型转换器new MySqlTypeConvert(),只在SQLQuery下生效
    keyWordsHandler(IKeyWordsHandler)数据库关键字处理器new MySqlKeyWordsHandler()
    typeConvertHandler(ITypeConvertHandler)类型转换器(默认)自定义实现ITypeConvertHandler,只在DefaultQuery下生效
    databaseQueryClass(AbstractDatabaseQuery)数据库查询方式默认DefaultQuery.class(通用元数据), SQLQuery.class(SQL查询)
    1. // 使用SQL查询的方式生成代码,属于旧的代码生成方式,通用性不是好,老的代码可以继续使用,适配数据库需要完成dbQuery和typeConvert的扩展,后期不再维护这种方式
    2. new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
    3. .dbQuery(new MySqlQuery())
    4. .schema("mybatis-plus")
    5. .typeConvert(new MySqlTypeConvert())
    6. .keyWordsHandler(new MySqlKeyWordsHandler())
    7. .databaseQueryClass(SQLQuery.class)
    8. .build();
    9. // 使用元数据查询的方式生成代码,默认已经根据jdbcType来适配java类型,支持使用typeConvertHandler来转换需要映射的类型映射
    10. new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
    11. .schema("mybatis-plus")
    12. .keyWordsHandler(new MySqlKeyWordsHandler())
    13. .build();

    全局配置(GlobalConfig)

    方法说明示例
    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
    1. new GlobalConfig.Builder()
    2. .fileOverride()
    3. .outputDir("/opt/baomidou")
    4. .author("baomidou")
    5. .enableKotlin()
    6. .enableSwagger()
    7. .dateType(DateType.TIME_PACK)
    8. .commentDate("yyyy-MM-dd")
    9. .build();

    包配置(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
    xml(String)Mapper XML 包名默认值:mapper.xml
    controller(String)Controller 包名默认值:controller
    other(String)自定义文件包名输出自定义文件时所用到的包名
    pathInfo(Map)路径配置信息Collections.singletonMap(OutputFile.mapperXml, "D://")
    1. new PackageConfig.Builder()
    2. .parent("com.baomidou.mybatisplus.samples.generator")
    3. .moduleName("sys")
    4. .entity("po")
    5. .service("service")
    6. .serviceImpl("service.impl")
    7. .mapper("mapper")
    8. .xml("mapper.xml")
    9. .controller("controller")
    10. .other("other")
    11. .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"))
    12. .build();

    模板配置(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
    1. new TemplateConfig.Builder()
    2. .disable(TemplateType.ENTITY)
    3. .entity("/templates/entity.java")
    4. .service("/templates/service.java")
    5. .serviceImpl("/templates/serviceImpl.java")
    6. .mapper("/templates/mapper.java")
    7. .mapperXml("/templates/mapper.xml")
    8. .controller("/templates/controller.java")
    9. .build();

    注入配置(InjectionConfig)

    方法说明示例
    beforeOutputFile(BiConsumer>)输出文件之前消费者
    customMap(Map)自定义配置 Map 对象Collections.singletonMap("test", "baomidou")
    customFile(Map)自定义配置模板文件Collections.singletonMap("test.txt", "/templates/test.vm") 方法 formatNameFunction 可以格式化文件,参考测试用例 H2CodeGeneratorTest.testCustomFileByList
    1. new InjectionConfig.Builder()
    2. .beforeOutputFile((tableInfo, objectMap) -> {
    3. System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
    4. })
    5. .customMap(Collections.singletonMap("test", "baomidou"))
    6. .customFile(Collections.singletonMap("test.txt", "/templates/test.vm"))
    7. .build();

    策略配置(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 只能配置一项 ,支持正则匹配、例如 ^t_.* 所有 t_ 开头的表名
    addExclude(String...)增加表排除匹配(内存过滤)include 与 exclude 只能配置一项 ,支持正则匹配、例如 .*st$ 所有 st 结尾的表名
    addTablePrefix(String...)增加过滤表前缀
    addTableSuffix(String...)增加过滤表后缀
    addFieldPrefix(String...)增加过滤字段前缀
    addFieldSuffix(String...)增加过滤字段后缀
    outputFile内置模板输出文件处理参考测试用例 H2CodeGeneratorTest.testOutputFile
    entityBuilder实体策略配置
    controllerBuildercontroller 策略配置
    mapperBuildermapper 策略配置
    serviceBuilderservice 策略配置
    1. new StrategyConfig.Builder()
    2. .enableCapitalMode()
    3. .enableSkipView()
    4. .disableSqlFilter()
    5. .likeTable(new LikeTable("USER"))
    6. .addInclude("t_simple")
    7. .addTablePrefix("t_", "c_")
    8. .addFieldSuffix("_flag")
    9. .build();

    Entity 策略配置

    方法说明示例
    nameConvert(INameConvert)名称转换实现
    superClass(Class)设置父类BaseEntity.class
    superClass(String)设置父类com.baomidou.global.BaseEntity
    disableSerialVersionUID禁用生成 serialVersionUID默认值:true
    enableFileOverride覆盖已生成文件默认值:false
    enableColumnConstant开启生成字段常量默认值:false
    enableChainModel开启链式模型默认值:false
    enableLombok开启 lombok 模型默认值:false
    enableRemoveIsPrefix开启 Boolean 类型字段移除 is 前缀默认值:false
    enableTableFieldAnnotation开启生成实体时生成字段注解默认值:false
    enableActiveRecord开启 ActiveRecord 模型默认值:false
    versionColumnName(String)乐观锁字段名(数据库字段)versionColumnName与versionPropertyName二选一即可
    versionPropertyName(String)乐观锁属性名(实体)versionColumnName与versionPropertyName二选一即可
    logicDeleteColumnName(String)逻辑删除字段名(数据库字段)logicDeleteColumnName与logicDeletePropertyName二选一即可
    logicDeletePropertyName(String)逻辑删除属性名(实体)logicDeleteColumnName与logicDeletePropertyName二选一即可
    naming数据库表映射到实体的命名策略默认下划线转驼峰命名:NamingStrategy.underline_to_camel
    columnNaming数据库表字段映射到实体的命名策略默认为 null,未指定按照 naming 执行
    addSuperEntityColumns(String...)添加父类公共字段
    addIgnoreColumns(String...)添加忽略字段
    addTableFills(IFill...)添加表字段填充
    addTableFills(List)添加表字段填充
    idType(IdType)全局主键类型
    convertFileName(ConverterFileName)转换文件名称
    formatFileName(String)格式化文件名称
    1. new StrategyConfig.Builder()
    2. .entityBuilder()
    3. .superClass(BaseEntity.class)
    4. .disableSerialVersionUID()
    5. .enableChainModel()
    6. .enableLombok()
    7. .enableRemoveIsPrefix()
    8. .enableTableFieldAnnotation()
    9. .enableActiveRecord()
    10. .versionColumnName("version")
    11. //.versionPropertyName("version")
    12. .logicDeleteColumnName("deleted")
    13. //.logicDeletePropertyName("deleteFlag")
    14. .naming(NamingStrategy.no_change)
    15. .columnNaming(NamingStrategy.underline_to_camel)
    16. .addSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time")
    17. .addIgnoreColumns("age")
    18. .addTableFills(new Column("create_time", FieldFill.INSERT))
    19. .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
    20. .idType(IdType.AUTO)
    21. .formatFileName("%sEntity")
    22. .build();

    Controller 策略配置

    方法说明示例
    superClass(Class)设置父类BaseController.class
    superClass(String)设置父类com.baomidou.global.BaseController
    enableFileOverride覆盖已生成文件默认值:false
    enableHyphenStyle开启驼峰转连字符默认值:false
    enableRestStyle开启生成@RestController 控制器默认值:false
    convertFileName(ConverterFileName)转换文件名称
    formatFileName(String)格式化文件名称
    1. new StrategyConfig.Builder()
    2. .controllerBuilder()
    3. .superClass(BaseController.class)
    4. .enableHyphenStyle()
    5. .enableRestStyle()
    6. .formatFileName("%sAction")
    7. .build();

    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
    enableFileOverride覆盖已生成文件默认值:false
    convertServiceFileName(ConverterFileName)转换 service 接口文件名称
    convertServiceImplFileName(ConverterFileName)转换 service 实现类文件名称
    formatServiceFileName(String)格式化 service 接口文件名称
    formatServiceImplFileName(String)格式化 service 实现类文件名称
    1. new StrategyConfig.Builder()
    2. .serviceBuilder()
    3. .superServiceClass(BaseService.class)
    4. .superServiceImplClass(BaseServiceImpl.class)
    5. .formatServiceFileName("%sService")
    6. .formatServiceImplFileName("%sServiceImp")
    7. .build();

    Mapper 策略配置

    方法说明示例
    superClass(Class)设置父类BaseMapper.class
    superClass(String)设置父类com.baomidou.global.BaseMapper
    enableFileOverride覆盖已生成文件默认值:false
    enableMapperAnnotation开启 @Mapper 注解默认值:false
    enableBaseResultMap启用 BaseResultMap 生成默认值:false
    enableBaseColumnList启用 BaseColumnList默认值:false
    cache(Class)设置缓存实现类MyMapperCache.class
    convertMapperFileName(ConverterFileName)转换 mapper 类文件名称
    convertXmlFileName(ConverterFileName)转换 xml 文件名称
    formatMapperFileName(String)格式化 mapper 文件名称
    formatXmlFileName(String)格式化 xml 实现类文件名称
    1. new StrategyConfig.Builder()
    2. .mapperBuilder()
    3. .superClass(BaseMapper.class)
    4. .enableMapperAnnotation()
    5. .enableBaseResultMap()
    6. .enableBaseColumnList()
    7. .cache(MyMapperCache.class)
    8. .formatMapperFileName("%sDao")
    9. .formatXmlFileName("%sXml")
    10. .build();

    自定义模版支持(DTO\VO等)配置

    Freemarker模版支持(DTO\VO等)配置

    1. /**
    2. * 代码生成器支持自定义[DTO\VO等]模版
    3. */
    4. public final class EnhanceFreemarkerTemplateEngine extends FreemarkerTemplateEngine {
    5. @Override
    6. protected void outputCustomFile(@NotNull Map<String, String> customFile, @NotNull TableInfo tableInfo, @NotNull Map<String, Object> objectMap) {
    7. String entityName = tableInfo.getEntityName();
    8. String otherPath = this.getPathInfo(OutputFile.other);
    9. customFile.forEach((key, value) -> {
    10. String fileName = String.format(otherPath + File.separator + entityName + "%s", key);
    11. this.outputFile(new File(fileName), objectMap, value);
    12. });
    13. }
    14. }

    使用方式样例(其他细节参数请查看文档)

    entityDTO.java.ftl 可参考源码内entity.java.ftl文件

    1. FastAutoGenerator.create(url, username, password)
    2. .globalConfig(builder -> {
    3. builder.author("abc") // 设置作者
    4. .enableSwagger() // 开启 swagger 模式
    5. .fileOverride() // 覆盖已生成文件
    6. .disableOpenDir() //禁止打开输出目录
    7. .outputDir(finalProjectPath + "/src/main/java"); // 指定输出目录
    8. })
    9. .packageConfig(builder -> {
    10. builder.parent("com.baomidou.mybatisplus.samples") // 设置父包名
    11. .moduleName("test") // 设置父包模块名
    12. .entity("model.entity") //设置entity包名
    13. .other("model.dto") // 设置dto包名
    14. .pathInfo(Collections.singletonMap(OutputFile.xml, finalProjectPath + "/src/main/resources/mapper")); // 设置mapperXml生成路径
    15. })
    16. .injectionConfig(consumer -> {
    17. Map<String, String> customFile = new HashMap<>();
    18. // DTO
    19. customFile.put("DTO.java", "/templates/entityDTO.java.ftl");
    20. consumer.customFile(customFile);
    21. });
  • 相关阅读:
    Kotlin + 协程 + Room 结合使用
    如何在云计算平台上完成分子对接
    java计算机毕业设计好物网站MyBatis+系统+LW文档+源码+调试部署
    Leetcode 完全平方数
    QT QFrame类
    【今日文章】:1.关于 $attr $lisenner $slot 用法的思考 2. 关于父子组件传值的思考 3.关于前端日志系统搭建的思考
    Spring6 的JdbcTemplate的JDBC模板类的详细使用说明
    云开发校园宿舍/企业/部门/物业故障报修小程序源码
    【李航统计学习笔记】第一章:统计学习及监督学习概论
    [leetcode 单调栈] 901. 股票价格跨度 M
  • 原文地址:https://blog.csdn.net/leesinbad/article/details/134424912