MybatisPlus 代码生成器(新版)

411 阅读4分钟

代码生成器 AutoGenerator

官网地址: baomidou.com/pages/779a6…

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

适用版本:mybatis-plus-generator 3.5.1 以上版本

目前官网上有两种生成方式可以选择分别是快速生成和交互式生成,教程中使用的快速生成的方式

引入相关依赖

<!--mybatis plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>
<!--mybatis plus generator-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.2</version>
</dependency>
<!--velocity-->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
</dependency>

MybatisPlus的版本是3.5.2

AutoGenerator的版本和MybatisPlus一致

velocity 生成代码的模板还可以是freemarker等

设计生成器

各位看官这块我就不展开写了,代码生成器主主要是一个Tool,杂七杂八的配置可以参考官方文档. 闲话少絮,直接上代码...

package com.zkjs.jszlyxzj.generator;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CodeGenerator {
    public static void main(String[] args) {
        String databaseUrl = "**DSUrl**";
        String databaseUser = "**DSUsername**";
        String databasePassword = "**DSPassword**";
        List<String> tables = new ArrayList<>();
        tables.add("**tablename**");
        DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder(databaseUrl, databaseUser, databasePassword)
                .build();
        AutoGenerator autoGenerator = new AutoGenerator(dataSourceConfig);
        // 全局配置
        GlobalConfig globalConfig = new GlobalConfig.Builder()
                .disableOpenDir()
                .outputDir(System.getProperty("user.dir") + "/src/main/java")
                .author("**name**")
                // .enableKotlin()
                .enableSwagger()
                // .dateType(DateType.ONLY_DATE) // 默认: DateType.TIME_PACK
                .commentDate("yyyy-MM-dd hh:mm:ss")
                .build();
        // 包配置
        PackageConfig packageConfig = new PackageConfig.Builder()
                .parent("**packageName**")
                // .moduleName("login")
                .entity("domain") // 默认: entity
                // .service("service") // 默认: service
                // .serviceImpl("service.impl") // 默认: service.impl
                // .mapper("mapper") // 默认: mapper
                // .xml("mapper.xml") // 默认: mapper.xml
                // .controller("controller") // 默认: controller
                // .other("other")
                .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mappers"))
                .build();
        // 模板配置
        TemplateConfig templateConfig = new TemplateConfig.Builder()
                // .disable()
                // .entity("/templates/entity.java")
                // .service("/templates/service.java")
                // .serviceImpl("/templates/serviceImpl.java")
                // .mapper("/templates/mapper.java")
                // .controller("/templates/controller.java")
                .build();
        // 注入配置
        InjectionConfig injectionConfig = 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();
        // 策略配置
        StrategyConfig strategyConfig = new StrategyConfig.Builder()
                // .enableCapitalMode() // 开启大写命名 默认值:false
                .enableSkipView() // 开启跳过视图 默认值:false
                // .disableSqlFilter() // 禁用 sql 过滤 默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关
                // .enableSchema() // 启用 schema 默认值:false,多 schema 场景的时候打开
                // .likeTable() // 模糊表匹配(sql 过滤) likeTable 与 notLikeTable 只能配置一项
                // .notLikeTable() // 模糊表排除(sql 过滤) likeTable 与 notLikeTable 只能配置一项
                // .addInclude() // 增加表匹配(内存过滤) include 与 exclude 只能配置一项 ,支持正则匹配、例如 ^t_.* 所有 t_ 开头的表名
                // .addExclude() // 增加表排除匹配(内存过滤) include 与 exclude 只能配置一项 ,支持正则匹配、例如 .*st$ 所有 st 结尾的表名
                // .addTablePrefix() // 增加过滤表前缀
                // .addTableSuffix() // 增加过滤表后缀
                // .addFieldPrefix() // 增加过滤字段前缀
                // .addFieldSuffix() // 增加过滤字段后缀
                .addInclude(tables)
                // Entity策略配置
                .entityBuilder()
                // .nameConvert() // 名称转换实现
                // .superClass(BaseEntity.class) // 设置父类 BaseEntity.class | com.baomidou.global.BaseEntity
                // .disableSerialVersionUID() // 禁用生成 serialVersionUID 默认值:true
                // .enableColumnConstant() // 开启生成字段常量 默认值:false
                // .enableChainModel() // 开启链式模型 默认值:false
                .enableLombok() // 开启 lombok 模型 默认值:false
                // .enableRemoveIsPrefix() // 开启 Boolean 类型字段移除 is 前缀 默认值:false
                .enableTableFieldAnnotation() // 开启生成实体时生成字段注解 默认值:false
                // .enableActiveRecord() // 开启 ActiveRecord 模型 默认值:false
                // .versionColumnName("deleted") // 乐观锁字段名(数据库字段) versionColumnName与versionPropertyName二选一即可
                // .versionPropertyName("deleted") // 乐观锁属性名(实体) versionColumnName与versionPropertyName二选一即可
                // .logicDeleteColumnName("deleted") // 逻辑删除字段名(数据库字段) logicDeleteColumnName与logicDeletePropertyName二选一即可
                // .logicDeletePropertyName("deleted") // 逻辑删除属性名(实体) logicDeleteColumnName与logicDeletePropertyName二选一即可
                // .naming(NamingStrategy.no_change) // 数据库表映射到实体的命名策略 默认下划线转驼峰命名:NamingStrategy.underline_to_camel
                .columnNaming(NamingStrategy.underline_to_camel) // 数据库表字段映射到实体的命名策略 默认为 null,未指定按照 naming 执行
                // .addSuperEntityColumns("id") // 添加父类公共字段
                // .addIgnoreColumns("age") // 添加忽略字段
                // .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE)) // 添加表字段填充
                // .idType(IdType.AUTO) // 全局主键类型
                // .convertFileName() // 转换文件名称
                // .formatFileName("%sEntity") // 格式化文件名称
                .fileOverride()
                // Controller策略配置
                .controllerBuilder()
                // .superClass(BaseController.class) // 设置父类 BaseController.class | com.baomidou.global.BaseController
                // .enableHyphenStyle() // 开启驼峰转连字符 默认值:false
                // .enableRestStyle() // 开启生成@RestController 控制器 默认值:false
                // .convertFileName() // 转换文件名称
                .formatFileName("%sAction") // 格式化文件名称
                .fileOverride()
                // Mapper策略配置
                .mapperBuilder()
                // .superClass(BaseMapper.class) // 设置父类 BaseMapper.class | com.baomidou.global.BaseMapper
                .enableMapperAnnotation() // 开启 @Mapper 注解 默认值:false
                .enableBaseResultMap() // 启用 BaseResultMap 生成 默认值:false
                // .enableBaseColumnList() // 启用 BaseColumnList 默认值:false
                // .cache(MyMapperCache.class) // 设置缓存实现类 MyMapperCache.class
                // .convertMapperFileName() // 转换 mapper 类文件名称
                // .convertXmlFileName() // 转换 xml 文件名称
                .formatMapperFileName("%sMapper") // 格式化 mapper 文件名称
                .formatXmlFileName("%sMapper") // 格式化 xml 实现类文件名称
                .fileOverride()
                // Service策略配置
                .serviceBuilder()
                // .superServiceClass(BaseService.class) // 设置 service 接口父类 BaseService.class | com.baomidou.global.BaseService
                // .superServiceImplClass(BaseServiceImpl.class) // 设置 service 实现类父类 BaseServiceImpl.class | com.baomidou.global.BaseServiceImpl
                // .convertServiceFileName() // 转换 service 接口文件名称
                // .convertServiceImplFileName() // 转换 service 实现类文件名称
                .formatServiceFileName("%sService") // 格式化 service 接口文件名称
                .formatServiceImplFileName("%sServiceImpl") // 格式化 service 实现类文件名称
                .fileOverride()
                .build();
        // autoGenerator.global(globalConfig).packageInfo(packageConfig).template(templateConfig).injection(injectionConfig).strategy(strategyConfig).execute();
        autoGenerator.global(globalConfig).packageInfo(packageConfig).strategy(strategyConfig).execute();
    }
}

content代码中这种代码需要替换

DSUrl: 数据库地址

DSUsername: 数据库用户

DSPassword: 数据库密码

tablename: 表名,可以同时生成多个也就是多add几个表

name: 作者

packageName: 包

其他的配置参考代码里面注释或者参考官网

生成代码

运行上面设计的生成器就可以生成代码了.