Mybatis-plus 代码生成器新版(新版)包括自定义模板
Mybatis-plus 代码生成器新版
·
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>
更多推荐
已为社区贡献4条内容
所有评论(0)