Mybatis-plus 代码生成器新版(新版)包括自定义模板

重构代码时使用了MyBatisPlus 代码生成器生成了初始代码,启动工具类后,在控制台输入表名逗号隔开或者all(全部表)生成代码模板,分享一下。

1.添加pom文件依赖

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

2.写个代码生成器工具类

package com.bairuitech.anychat.dz.user.util;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.IFill;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.util.*;

/**
 * @author Liby
 * @date 2022-04-07 13:45
 * @description:mybatisplus代码生成
 * @version:
 */

public class CodeAutoGenerator {
    public static void main(String[] args) {

        // 生产文件的项目相对位置
        StringBuffer projectPath = new StringBuffer();
        // 获取系统路径
        String systemPath = System.getProperty("user.dir");
        // 将反斜杠全部替换为双斜杠 并拼接项目路径
        projectPath.append(systemPath.replaceAll("\\\\", "//"));
        System.out.println(projectPath);

        //entity表字段属性List,用于生成时间自动填充属性
        List<IFill> iFills = new ArrayList<>();
        iFills.add(new Column("create_time", FieldFill.INSERT));
        iFills.add(new Column("update_time", FieldFill.INSERT_UPDATE));

        FastAutoGenerator.create("jdbc:mysql://192.168.105.139:3306/dz_user_local?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai", "root", "123456")
                .globalConfig(builder -> {
                    builder
                            .author("liby") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            //.fileOverride() // 覆盖已生成文件
                            .outputDir(projectPath + "//anychatx-user-service//src//main//java")// 指定输出目录
                            .disableOpenDir();// 生成代码后不打开输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.bairuitech.anychat.dz") // 设置父包名
                            .moduleName("user") // 设置父包模块名
                            .entity("pojo.entity")
                            .controller("controller") // Controller 包名	默认值:controller
                            .other("other") // 自定义文件包名	输出自定义文件时所用到的包名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, projectPath + "//anychatx-user-service//src//main//resources//mapper")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude(getTables(scanner("请输入表名,多个英文逗号分隔?所有输入 all:"))) // 设置需要生成的表名
                            .addTablePrefix("base_")// 设置过滤表前缀
                            .entityBuilder().addTableFills(iFills)//生成时间自动填充属性
                            .controllerBuilder().enableRestStyle()//开启@RestController风格
                            .serviceBuilder().formatServiceFileName("%sService"); //去掉默认的I前缀
                })
                //使用Freemarker引擎模板,默认的是Velocity引擎模板
                .templateEngine(new FreemarkerTemplateEngine())
                //设置自定义模板路径
                .templateConfig(builder -> {
                    builder.controller("/templates/controller.java");
                })
                .execute();

    }

    /**
     * 读取控制台内容
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append(tip);
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (
                    StringUtils.isNotBlank(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }

    /**
     * 处理 all 情况
     */

    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }

}


注意:

使用自定义模板需要在依赖包中将模板文件复制到/resources/templates目录下

在这里插入图片描述
在这里插入图片描述
3.编辑controller模板文件,其它模板类似

package ${package.Controller};

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import com.bairuitech.anychat.common.model.ResultModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import ${package.Service}.${table.serviceName};
import ${package.Entity}.${entity};

<#if restControllerStyle>
import org.springframework.web.bind.annotation.RestController;
<#else>
import org.springframework.stereotype.Controller;
</#if>
<#if superControllerClassPackage??>
    import ${superControllerClassPackage};
</#if>

/**
* <p>
    * ${table.comment!} 前端控制器
    * </p>
*
* @author ${author}
* @since ${date}
*/
<#if restControllerStyle>
@Api(value = "${table.controllerName}",tags = "${table.controllerName}")
@RestController
<#else>
@Controller
</#if>
@RequestMapping("<#if package.ModuleName?? && package.ModuleName != "">/${package.ModuleName}</#if>/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}</#if>")
<#if kotlin>
class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()</#if>
<#else>
    <#if superControllerClass??>
    public class ${table.controllerName} extends ${superControllerClass} {
    <#else>
    public class ${table.controllerName} {
    </#if>
    @Autowired
    private ${table.serviceName} ${table.entityPath}Service;

    @ApiOperation("list${entity}")
    @PostMapping(value = "list${entity}")
    public ResultModel list${entity}() {

    return ResultModel.success();
    }
    }
</#if>

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐