mybatisPlus新版代码生成器

逆向工程

1.针对 mybatis-plus 的逆向工程

image-20230728181519591

本文章使用的是3.5.0及以上的构造方法,依赖:

    	<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.1</version>
        </dependency>

        <!-- 代码自动生成器依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.3.1</version>
        </dependency>
         <!-- 生成模板-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>
  • 3.5.0之前还能够使用
AutoGenerator mpg = new AutoGenerator();
  • 3.5.0之后官方推荐使用的是
FastAutoGenerator

来看一下新版本的官网案例

FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> {
                    builder.author("abc") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .disableOpenDir() //禁止打开输出目录
                            .outputDir(finalProjectPath + "/src/main/java"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.baomidou.mybatisplus.samples") // 设置父包名
                            .moduleName("test") // 设置父包模块名
                            .entity("model.entity") //设置entity包名
                            .other("model.dto") // 设置dto包名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, finalProjectPath + "/src/main/resources/mapper")); // 设置mapperXml生成路径

                })
                .injectionConfig(consumer -> {
                    Map<String, String> customFile = new HashMap<>();
                    // DTO
                    customFile.put("DTO.java", "/templates/entityDTO.java.ftl");
                    consumer.customFile(customFile);
                });

这里直接允许就可以构造出来了

2.一些常用配置(第三的时候介绍如何使用

数据库配置

属性说明
urljdbc 路径
username数据库账号
password数据库密码

全局配置

方法说明
disableOpenDir禁止打开输出目录
outputDir(String)指定输出目录
author(String)作者名
enableKotlin开启 kotlin 模式
enableSwagger开启 swagger 模式
dateType(DateType)时间策略
commentDate(String)注释日期

包配置

方法说明
parent(String)父包名
moduleName(String)父包模块名
entity(String)Entity 包名
service(String)Service 包名
serviceImpl(String)Service Impl 包名
mapper(String)Mapper 包名
xml(String)Mapper XML 包名
controller(String)Controller 包名
other(String)自定义文件包名
pathInfo(Map<OutputFile, String>)路径配置信息

模板配置(自定义自己的模板

方法说明
disable禁用所有模板
disable(TemplateType…)禁用模板
entity(String)设置实体模板路径(JAVA)
entityKt(String)设置实体模板路径(kotlin)
service(String)设置 service 模板路径
serviceImpl(String)设置 serviceImpl 模板路径
mapper(String)设置 mapper 模板路径
mapperXml(String)设置 mapperXml 模板路径
controller(String)设置 controller 模板路径

3.配置模板生成器(以本项目为例

目录结构

image-20230728182403703

总体目录就是这样

根据官网给出的构造方法可以得到

构造函数

这里就不多废话直接上代码然后带着看

public class CodeGenerator {
 

    public final String finalProjectPath ="F:/学习的项目/testNixiang";

    public static void main(String[] args) {

        //代码生成器


        //模板引擎不用改但是记得引入库
        String templatePath = "/templates/mapper.xml.ftl";


        //配置数据源
        DataSourceConfig sourceConfig = new DataSourceConfig
                .Builder("jdbc:mysql://127.0.0.1:3306/hj_admin", "root", "123456")
                .build();
        //全局配置
        GlobalConfig globalConfig = new GlobalConfig
                .Builder()
                .outputDir("F:/学习的项目/testNixiang/src/main/java")
                .author("hj")
                .fileOverride()
                .build();

        //包配置 用于创建包
        PackageConfig packageConfig = new PackageConfig.Builder()
                //父包名
                .parent("com.example.testnixiang")
                //实体类名称
                .entity("pojo")
                //服务层名称
                .service("service")
                //服务实现名称
                .serviceImpl("service.impl")
                //mapper名称
                .mapper("mapper")
                //mapper.xml名称
                .xml("mapper.xml")
                //controller名称
                .controller("controller")
                .build();

        //模板配置
        TemplateConfig templateConfig = new TemplateConfig.Builder()
                .entity("/templates/entity.java")
                .service("/templates/service.java")
                .serviceImpl("/templates/serviceImpl.java")
                .mapper("/templates/mapper.java")
                .xml("/templates/mapper.xml")
                .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()
                .enableSkipView()
                .disableSqlFilter()
                .likeTable(new LikeTable("classtable, imgtable"))
                .addInclude("classtable,imgtable")
                .build();
        //模板配置载入
        FastAutoGenerator.create(sourceConfig.getUrl(), sourceConfig.getUsername(), sourceConfig.getPassword())
                .globalConfig(builder -> builder // globalConfig builder function
                        .outputDir(globalConfig.getOutputDir()) // 设置输出目录
                        .author(globalConfig.getAuthor()) // 设置作者
                        .fileOverride() // 开启覆盖已有文件,但是个方法已经弃用
                        .build())
                .packageConfig(builder -> builder // packageConfig builder function
                        .parent(packageConfig.getParent()) // 设置父包名
                        .entity(packageConfig.getEntity()) // 设置entity包名
                        .service(packageConfig.getService()) // 设置service包名
                        .serviceImpl(packageConfig.getServiceImpl()) // 设置serviceImpl包名
                        .mapper(packageConfig.getMapper()) // 设置mapper包名
                        .xml(packageConfig.getXml()) // 设置xml包名
                        .controller(packageConfig.getController()) // 设置controller包名
                        .build())
                .strategyConfig(builder -> builder // strategyConfig builder function
                        .enableCapitalMode() // 允许大写命名
                        .enableSkipView() // 允许跳过视图
                        .disableSqlFilter() // 关闭sql过滤,这个地方可以设置自己的过滤规则
                        .likeTable(new LikeTable("imgtable")) //设置模糊匹配表名
                        .addInclude("imgtable") //设置要生成的表名
                        .entityBuilder().enableLombok()//开启lombok支持
                        .build())
                .templateEngine(new FreemarkerTemplateEngine()) // Set template engine
                .templateConfig(builder -> builder
                        .serviceImpl("/templates/wait/serviceImpl.java" )
                        .entity("/templates/entity.java" )
                        .build())
                .execute();
    }
}

可以参照官网看,我这边通过

  • FastAutoGenerator.create(sourceConfig.getUrl(), sourceConfig.getUsername(), sourceConfig.getPassword())设置了连接上数据库
  • globalConfig配置全局变量
    • outputDir(globalConfig.getOutputDir()) // 设置输出目录
    • author(globalConfig.getAuthor()) // 设置作者
    • fileOverride() // 开启覆盖已有文件,但是个方法已经弃用
  • packageConfig配置路径这些方面
    • .parent(packageConfig.getParent()) // 设置父包名
    • .entity(packageConfig.getEntity()) // 设置entity包名
    • .service(packageConfig.getService()) // 设置service包名
    • .serviceImpl(packageConfig.getServiceImpl()) // 设置serviceImpl包名
    • .mapper(packageConfig.getMapper()) // 设置mapper包名
    • .xml(packageConfig.getXml()) // 设置xml包名
    • .controller(packageConfig.getController()) // 设置controller包名
      • 以上配置具体参考第2中的目录图
  • strategyConfig策略配置
    • .enableCapitalMode() // 允许大写命名
    • .enableSkipView() // 允许跳过视图
    • .disableSqlFilter() // 关闭sql过滤,这个地方可以设置自己的过滤规则
    • .likeTable(new LikeTable(“imgtable”)) //设置模糊匹配表名
    • .addInclude(“imgtable”) //设置要生成的表名
    • .entityBuilder().enableLombok()//开启lombok支持
  • templateEngine选择生成模板的模板引擎(这里使用的是freemaker)
  • templateConfig自定义模板配置
    • .serviceImpl(“/templates/wait/serviceImpl.java” ) //服务实现层的模板
    • .entity(“/templates/entity.java” ) //实体类实现的模板
      • 这里需要注意,因为freemaker的后缀是.ftl你会疑惑为什么会直到.java因为他生成的时候会自动加上.ftl后缀所以不要担心

这里可能会疑惑自定义模板怎么配置,这里我需要提前说一下,自定义模板路径扫的是resources包里面的,所以需要注意本项目的目录安排

image-20230728183500808

至于模板从哪里来直接开包找到依赖也就是外部库

image-20230728183628448

可以看到官方的模板

本项目修改了一下entity.java.ftl

主要是看他的原本的lombok用的不是@Data注解有点不舒服,我们也可以通过模板的字段查看到有哪些属性,后面讲

<#if entityLombokModel>
import lombok.Getter;
import lombok.Setter;
    <#if chainModel>
import lombok.experimental.Accessors;
    </#if>
</#if>
        
<#if entityLombokModel>
@Getter
@Setter
    <#if chainModel>
@Accessors(chain = true)
    </#if>
</#if>

我们可以看到这里的模板是是否启用entityLombokModel启用的话就导入lombok的库并且生成注解gettersetter,然后修改一下放到resources/templates/

<#--增加导入的类-->
<#if entityLombokModel>
import lombok.Getter;
import lombok.Setter;
import lombok.Data;

    <#if chainModel>
import lombok.experimental.Accessors;
    </#if>
</#if>
        
<#if entityLombokModel>
@Getter
@Setter
@Data
    <#if chainModel>
@Accessors(chain = true)
    </#if>
</#if>

现在问题又来了如何知道他有哪些属性?这个就得去看这个依赖有哪些东西

image-20230728184135280

我们可以对着globalConfig按住ctrl + 鼠标左键进入

image-20230728190451800

然后同样的方法点击GlobaConfig进入查看这个类的属性

image-20230728190644009

并且我们可以发现全局配置中的是否覆盖文件这里已经弃用了,所以要找到这个实在策略模式里面,自己找了image-20230728190659516

lambl表达式

我们在点进去的第一次可以看到image-20230728190829518

这里诞生了消费者的builder,我们需要直接构造出一个类所以是build.点什么什么的,然后生成实例付给自身,然后执行FastAutoGenerator.execute()方法从而开始生成

最后运行这个类

image-20230728191428101

看目录

image-20230728191613541

记得把这个修改为自己的项目

image-20230728191646670

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾米莉亚小汉堡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值