【SpringBoot学习】51、MybatisPlus 代码生成器、定制代码模板

本文介绍了如何使用MybatisPlus代码生成器,并展示了如何配置及定制代码模板,包括实体类、Service、Mapper等。通过示例代码,演示了删除已有文件并根据指定数据库表生成相应Java代码的过程,同时支持自定义DTO、VO模板,增强代码生成的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MybatisPlus 代码生成器、定制代码模板

相关的 pom 版本

<mybatis-plus-generator.version>3.5.2</mybatis-plus-generator.version>
<freemarker.version>2.3.31</freemarker.version>

<!-- 代码生成器 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>${mybatis-plus-generator.version}</version>
</dependency>
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>${freemarker.version}</version>
</dependency>


<!-- 代码生成器 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
</dependency>
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
</dependency>

直接上代码

package com.quickboot;

import cn.hutool.core.io.FileUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * MybatisPlus 代码生成器
 * https://baomidou.com/pages/981406/
 *
 * @author Tellsea
 * @date 2022/11/22
 */
public class MybatisPlusGenerateTest {

    public static void main(String[] args) {
        // 参数
        String author = "Tellsea";
        String parentPackage = "com.quickboot";
        String mavenModuleName = "quick-boot-generate";
        String moduleName = "generate";
        String tableName = "sys_dict";

        FileUtil.del("D:\\Workspace\\IDEAWorkspace\\quick-boot\\quick-boot\\quick-boot-generate\\src\\main\\java\\com\\quickboot\\generate");
        FileUtil.del("D:\\Workspace\\IDEAWorkspace\\quick-boot\\quick-boot\\quick-boot-generate\\src\\main\\resources\\mapper\\generate");

        String rootPath = System.getProperty("user.dir") + "/" + mavenModuleName + "/src/main";

        FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/quick-boot", "root", "123456")
                .globalConfig(builder -> {
                    builder.outputDir(rootPath + "/java")
                            .author(author)
                            .enableSwagger()
                            .dateType(DateType.ONLY_DATE)
                            .commentDate("yyyy-MM-dd");
                })
                .packageConfig(builder -> {
                    builder.parent(parentPackage)
                            .moduleName(moduleName)
                            .pathInfo(Collections.singletonMap(OutputFile.xml, rootPath + "/resources/mapper/" + moduleName))
                            .other("vo");
                })
                .templateConfig(builder -> {
                    builder.entity("/templates/java/entity.java")
                            .service("/templates/java/service.java")
                            .serviceImpl("/templates/java/serviceImpl.java")
                            .mapper("/templates/java/mapper.java")
                            .xml("/templates/java/mapper.xml")
                            .controller("/templates/java/controller.java");
                })
                .strategyConfig(builder -> {
                    builder.enableCapitalMode()
                            .enableSkipView()
                            .disableSqlFilter()
                            .addInclude(tableName)
                            // 实体类
                            .entityBuilder()
                            .disableSerialVersionUID()
                            .enableChainModel()
                            .enableLombok()
                            .naming(NamingStrategy.underline_to_camel)
                            .columnNaming(NamingStrategy.underline_to_camel)
                            //.addSuperEntityColumns("created_by", "created_time", "updated_by", "updated_time", "delete_status")
                            .idType(IdType.AUTO);
                    builder.controllerBuilder().enableRestStyle();
                })
                .injectionConfig(builder -> {
                    Map<String, String> customFile = new HashMap<>(16);
                    customFile.put("Vo.java", "/templates/java/vo.java.ftl");
                    customFile.put(".sql", "/templates/sql/sql.ftl");
                    customFile.put(".vue", "/templates/vue/index.vue.ftl");
                    customFile.put(".js", "/templates/js/js.ftl");
                    builder.customFile(customFile);
                })
                .templateEngine(new EnhanceFreemarkerTemplateEngine())
                .execute();
    }
}

生成效果

  • 代码生成器支持自定义[DTO\VO等]模版
package com.quickboot;

import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import javax.validation.constraints.NotNull;
import java.io.File;
import java.util.Map;

/**
 * 代码生成器支持自定义[DTO\VO等]模版
 *
 * @author Tellsea
 * @date 2022/11/23
 */
public final class EnhanceFreemarkerTemplateEngine extends FreemarkerTemplateEngine {

    @Override
    protected void outputCustomFile(@NotNull Map<String, String> customFile, @NotNull TableInfo tableInfo, @NotNull Map<String, Object> objectMap) {
        String entityName = tableInfo.getEntityName();
        objectMap.put("entityVo", entityName + "Vo");
        String otherPath = this.getPathInfo(OutputFile.other);
        customFile.forEach((key, value) -> {
            String fileName = String.format(otherPath + File.separator + entityName + "%s", key);
            this.outputFile(new File(fileName), objectMap, value);
        });
    }
}

  • 代码模板从 MybatisPlus 的代码生成器 jar 包复制出来修改即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Tellsea

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

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

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

打赏作者

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

抵扣说明:

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

余额充值