• Mybatis-plus-generator 自定义模板生成自定义 DTO、VO等


    mybatis-plus 官网: https://baomidou.com/
    上面的资料很全,本文以 3.5.1为例子

    pom配置文件

    
    
        
            code-demo
            com.uu
            1.0.0
        
        4.0.0
    
        mybatis-plus-generator
    
        
            8
            8
             3.5.2
            3.5.1
        
    
    
        
            
            
                com.baomidou
                mybatis-plus
                ${mybatis-plus.version}
            
    
            
            
                com.baomidou
                mybatis-plus-generator
                ${mybatis-plus-generator.version}
                5.2.15.RELEASE
                2.3.12.RELEASE
            
    
            
            
                org.freemarker
                freemarker
            
    
            
            
                org.apache.velocity
                velocity-engine-core
                2.0
            
    
            
            
                mysql
                mysql-connector-java
                runtime
            
    
            
            
                io.springfox
                springfox-swagger2
                2.9.2
            
    
            
            
                org.springframework
                spring-webmvc
                ${spring.version}
            
        
    
            
                
                
                    org.springframework.boot
                    spring-boot-dependencies
                    ${spring.boot.version}
                    pom
                    import
                
        
    
    
    • 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
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84

    新建一个主类

    package com.xx;
    
    import com.baomidou.mybatisplus.generator.FastAutoGenerator;
    import com.baomidou.mybatisplus.generator.config.OutputFile;
    
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * https://baomidou.com/pages/779a6e/ 新
     * 

    * https://baomidou.com/pages/d357af/ 旧(参数详解) *

    * 自定义模板有哪些可用参数?Github (opens new window)AbstractTemplateEngine 类中方法 getObjectMap 返回 objectMap 的所有值都可用。 */ public class Generator { public static void main(String[] args) { String userDir = System.getProperty("user.dir"); String finalProjectPath = userDir + "/mybatis-plus-generator"; System.out.println(finalProjectPath); FastAutoGenerator.create("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8", "root", "root") .globalConfig(builder -> { builder.author("kanan") // 设置作者 .fileOverride() .enableSwagger() // 开启 swagger 模式 .disableOpenDir() //禁止打开输出目录 .outputDir(finalProjectPath + "/src/main/java"); // 指定配置文件输出目录 }) .packageConfig(builder -> { builder.parent("com.xx") // 设置父包名 .moduleName("gen") // 设置父包模块名 .pathInfo(Collections.singletonMap(OutputFile.mapperXml, finalProjectPath + "/src/main/resources/mapper")); // 设置mapperXml生成路径 }) .strategyConfig(builder -> { // 需要被解析的表名 builder.addInclude("mind_user"); // 开启lombok builder.entityBuilder().enableLombok().enableTableFieldAnnotation(); // 生成 restcontroller builder.controllerBuilder().enableRestStyle(); }) .injectionConfig(consumer -> { Map customFile = new HashMap<>(); // 下面的key会作为类名后缀,进而生成新类 customFile.put("DTO.java", "/templates/entityDTO.java.ftl"); consumer.customFile(customFile); }) .templateEngine(new EnhanceFreemarkerTemplateEngine()) .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
    • 53
    • 54
    • 55
    • 56

    自定义EnhanceFreemarkerTemplateEngine,用于生成自定义的类

    该类继承了默认的FreemarkerTemplateEngine,重写outputCustomFile方法,主要差异点是指定新类的生成路径

    package com.xx;
    
    import com.baomidou.mybatisplus.generator.config.OutputFile;
    import com.baomidou.mybatisplus.generator.config.po.TableInfo;
    import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
    import org.jetbrains.annotations.NotNull;
    
    import java.io.File;
    import java.util.Map;
    
    public class EnhanceFreemarkerTemplateEngine extends FreemarkerTemplateEngine {
    
        @Override
        protected void outputCustomFile(@NotNull Map customFile, @NotNull TableInfo tableInfo, @NotNull Map objectMap) {
            // objectMap 里的key可以在ftl文件中直接引用
            // https://copyfuture.com/blogs-details/20210404114118659h
            String entityName = tableInfo.getEntityName();
            String otherPath = this.getPathInfo(OutputFile.other);
            customFile.forEach((key, value) -> {
                // 拼接生成路径
                String fileName = String.format(otherPath + File.separator + entityName + "%s", key);
                System.out.println(fileName);
                this.outputFile(new File(fileName), objectMap, value);
            });
        }
    }
    
    
    • 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

    新建 entityDTO.java.ftl模板文件

    1、模板文件主要在上面 injectionConfig 里进行配置,用key-value的方式进行配置,可以配置多个;
    2、如果配置多个,则在自定义的EnhanceFreemarkerTemplateEngine 类 outputCustomFile方法会被调用多次;
    3、customFile参数就是在injectionConfig里注入的map
    4、ftl文件我们可以用 mybatis-plus-generator 里自带的模板文件进行修改的来;ftl文件里有很多变量,我们可以在outputCustomFile方法的objectMap参数里获得
    在这里插入图片描述
    附上我未完成的模板文件

    package ${package.Other};
    
    <#list table.importPackages as pkg>
        import ${pkg};
    
    
    import lombok.Getter;
    import lombok.Setter;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    /**
    * 

    * DTO *

    * * @author ${author} * @since ${date} */ @Getter @Setter public class ${entity}DTO implements Serializable { private static final long serialVersionUID = 1L; <#-- ---------- BEGIN 字段循环遍历 ----------> <#list table.fields as field> private ${field.propertyType} ${field.propertyName}; <#------------ END 字段循环遍历 ----------> }
    • 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

    其他:

    自定义模板有哪些可用参数?Github (opens new window)AbstractTemplateEngine 类中方法 getObjectMap 返回 objectMap 的所有值都可用。

    最终生成结果
    在这里插入图片描述
    代码已上传到: https://gitee.com/aqu415/demo/tree/master/mybatis-plus-generator 可以下载下来调试

    over~~

  • 相关阅读:
    博客性能优化笔记 | 99分
    flutter系列之:flutter中常用的Stack layout详解
    《MySQL数据库进阶实战》读后感(SQL 小虚竹)
    springboot手机推荐网站毕业设计源码052329
    接口测试用例和功能测试用例一样吗?怎么写?
    壹基金为爱同行到余村,以一步步健行换一滴滴净水
    Golang GMP调度模型:实现高效协程调度和执行
    青少年python系列 42.面向对象-继承
    第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京),签到题5题
    安卓开发面试题
  • 原文地址:https://blog.csdn.net/Aqu415/article/details/126201062