• MyBatisPlus(四、代码生成器)


    作者:大三的土狗

    专栏:MyBatis-Plus
    在这里插入图片描述


    一、旧版本

    注意

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

      AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速根据数据表自动生成实体类、Mapper、Service、ServiceImpl、Controller等各个模块的代码,极大的提升了开发效率。

    1、添加模板引擎依赖

      添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。

    Velocity(默认):

    <dependency>
        <groupId>org.apache.velocitygroupId>
        <artifactId>velocity-engine-coreartifactId>
        <version>最新版本version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Freemarker:

    <dependency>
        <groupId>org.freemarkergroupId>
        <artifactId>freemarkerartifactId>
        <version>最新版本version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Beetl:

    <dependency>
        <groupId>com.ibeetlgroupId>
        <artifactId>beetlartifactId>
        <version>最新版本version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们选用默认的

    2、添加generator依赖

    在 pom.xml 导入 MyBatis Plus Generator 的依赖

    
        com.baomidou
        mybatis-plus-generator
        3.3.1.tmp
    
    
    
        org.apache.velocity
        velocity
        1.7
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3、编写生成器代码

    1、配置 GlobalConfig

    这里是生成的位置作者

    GlobalConfig globalConfig = new GlobalConfig();
    globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
    globalConfig.setAuthor("jobob");
    globalConfig.setOpen(false);
    
    • 1
    • 2
    • 3
    • 4
    2、DataSourceConfig

    这里是数据库的连接信息

    DataSourceConfig dataSourceConfig = new DataSourceConfig();
    dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ant?useUnicode=true&useSSL=false&characterEncoding=utf8");
    dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
    dataSourceConfig.setUsername("root");
    dataSourceConfig.setPassword("password");
    
    • 1
    • 2
    • 3
    • 4
    • 5

    详细代码如下:

    package com.example.mybatisplus;
    
    import com.baomidou.mybatisplus.annotation.DbType;
    import com.baomidou.mybatisplus.generator.AutoGenerator;
    import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
    import com.baomidou.mybatisplus.generator.config.GlobalConfig;
    import com.baomidou.mybatisplus.generator.config.PackageConfig;
    import com.baomidou.mybatisplus.generator.config.StrategyConfig;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    
    public class Main {
    
        public static void main(String[] args) {
            //1、创建generator对象
            AutoGenerator autoGenerator = new AutoGenerator();
            //数据源
            DataSourceConfig dataSourceConfig = new DataSourceConfig();
            dataSourceConfig.setDbType(DbType.MYSQL);
            dataSourceConfig.setUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8");
            dataSourceConfig.setUsername("root");
            dataSourceConfig.setPassword("root");
            dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
            autoGenerator.setDataSource(dataSourceConfig);      //设置数据源
            //2、全局配置
            GlobalConfig globalConfig = new GlobalConfig();
            globalConfig.setOutputDir(System.getProperty("user.dir")+"/src/main/java");
            globalConfig.setOpen(false);        //是否打开输出目录
            globalConfig.setAuthor("xmp");      //作者
            globalConfig.setServiceName("%sService");           //设置生成的service接口的名字不带I
            autoGenerator.setGlobalConfig(globalConfig);        //设置全局配置
            //3、包信息
            PackageConfig packageConfig = new PackageConfig();  //包配置
            packageConfig.setParent("com.example.mybatisplus");     //设置父包名
            packageConfig.setModuleName("generator");       //  设置子包名
            packageConfig.setController("controller");      //设置控制器包名
            packageConfig.setService("service");
            packageConfig.setServiceImpl("service.impl");
            packageConfig.setMapper("mapper");
            packageConfig.setEntity("entity");
            autoGenerator.setPackageInfo(packageConfig);        //设置包配置
            //4、配置策略
            StrategyConfig strategyConfig = new StrategyConfig();       //策略配置
            strategyConfig.setEntityLombokModel(true);      //是否使用lombok
            strategyConfig.setNaming(NamingStrategy.underline_to_camel);        //数据库表映射到实体的命名策略
            strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);  //数据库表字段映射到实体的命名策略
            autoGenerator.setStrategy(strategyConfig);      //设置策略配置
    
            autoGenerator.execute();        //执行生成
    
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    4、效果

    在这里插入图片描述

    二、新版本

    1、导入依赖

    
        com.baomidou
        mybatis-plus-generator
        最新版本
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意

    当前包未传递依赖 MP 包、mysql等,需要自己引入!

    2、快速生成

    FastAutoGenerator.create("url", "username", "password")
        .globalConfig(builder -> {
            builder.author("baomidou") // 设置作者
                .enableSwagger() // 开启 swagger 模式
                .fileOverride() // 覆盖已生成文件
                .outputDir("D://"); // 指定输出目录
        })
        .packageConfig(builder -> {
            builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
                .moduleName("system") // 设置父包模块名
                .pathInfo(Collections.singletonMap(OutputFile.xml, "D://")); // 设置mapperXml生成路径
        })
        .strategyConfig(builder -> {
            builder.addInclude("t_simple") // 设置需要生成的表名
                .addTablePrefix("t_", "c_"); // 设置过滤表前缀
        })
        .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
        .execute();
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    3、交互式生成

    FastAutoGenerator.create(DATA_SOURCE_CONFIG)
        // 全局配置
        .globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称?")).fileOverride())
        // 包配置
        .packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?")))
        // 策略配置
        .strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
                            .controllerBuilder().enableRestStyle().enableHyphenStyle()
                            .entityBuilder().enableLombok().addTableFills(
                                    new Column("create_time", FieldFill.INSERT)
                            ).build())
        /*
            模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker
           .templateEngine(new BeetlTemplateEngine())
           .templateEngine(new FreemarkerTemplateEngine())
         */
        .execute();
    
    
    // 处理 all 情况
    protected static List getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    4、配置

    1、DataSourceConfig

    基础配置

    属性说明示例
    urljdbc 路径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();
    
    • 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();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    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();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    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
    xml(String)Mapper XML 包名默认值:mapper.xml
    controller(String)Controller 包名默认值:controller
    other(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")
        .xml("mapper.xml")
        .controller("controller")
        .other("other")
        .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"))
        .build();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    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();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    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();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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实体策略配置
    controllerBuildercontroller 策略配置
    mapperBuildermapper 策略配置
    serviceBuilderservice 策略配置

    其他具体详细配置参考:https://baomidou.com/pages/981406/#service-%E7%AD%96%E7%95%A5%E9%85%8D%E7%BD%AE

  • 相关阅读:
    Iterator设计模式
    JSD-2204-(业务逻辑开发)-续秒杀业务-消息队列-Day14
    MySQL——面试必背题
    《最新出炉》系列入门篇-Python+Playwright自动化测试-49-Route类拦截修改请求-下篇
    并发编程 | JMM、volitle、CAS
    软件工程导论第六版 第五章 总体设计
    ArcGIS Pro中的拓扑检查
    【新知实验室 基于WEB的实时音视频(TRTC)案例搭建】
    巯基SH/氨基NH2/羧基COOH/PEG/蛋白Protein/抗体antibody修饰Au@TiO2 核壳纳米粒子 二氧化钛包裹金表面
    求助,有关Kriging 代理模型相关问题
  • 原文地址:https://blog.csdn.net/qq_53463544/article/details/126378764