我的spring boot版本是2.7.2
导入jar
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.8.3</version>
</dependency>
<!-- 持久层 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<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.2</version>
</dependency>
<!--模板引擎-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
<version>2.4.4</version>
</dependency>
生成器代码
package com.bdsoft.recruit.generator;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.IFill;
import com.baomidou.mybatisplus.generator.config.ConstVal;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.builder.Controller;
import com.baomidou.mybatisplus.generator.config.builder.Entity;
import com.baomidou.mybatisplus.generator.config.builder.Mapper;
import com.baomidou.mybatisplus.generator.config.builder.Service;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author: wangmh
* @since: 2022年08月12日 17:52
*/
/**
* 代码生成器 声entity、dao、mapper、service、controller
*/
public class GeneratorStart {
/**
* 项目根路径 需要指向后端项目根文件夹Service目录
* 如果同时导入前后端代码,即Service的上一级目录,值为 System.getProperty("user.dir") + File.separator + "Service"
* 如果是单独打开的后端项目使用 System.getProperty("user.dir")
*/
private final static String projectPath = System.getProperty("user.dir");
/**
* 作者 开发人员姓名
*/
private final static String author = "wangmh";
/**
* 模块名,需要是模块的文件夹名称<br>
* ps:如果包路径和模块名不一致,比如系统管模块名为sym,但是包路径为com.bdsoft.xtgl
* 此时修改 packageConfig 下面的 .moduleName("xtgl") 的值为xtgl即可
*/
private final static String modelName = "recruit";
/**
* 本次代码生成的表名
*/
private final static String[] tableName = {"rec_gateway_basic"};
//true时候,生成代码以modelName开头
private final static boolean startWithModelName = true;
// service是否以i开头
private final static boolean startWithI = false;
public static void main(String[] args) {
List<IFill> tableFillList = new ArrayList<>();
// tableFillList.add(new Column("createTime", FieldFill.INSERT));
// tableFillList.add(new Column("createUser", FieldFill.INSERT));
// tableFillList.add(new Column("updateTime", FieldFill.INSERT_UPDATE));
// tableFillList.add(new Column("updateUser", FieldFill.INSERT_UPDATE));
FastAutoGenerator.create("jdbc:mysql://localhost:3306/test_dev?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true&rewriteBatchedStatements=true&autoReconnect=true",
"root",
"root")
.globalConfig(builder -> {
// 设置作者
builder.author(author)
// 开启 swagger 模式
.enableSwagger()
.disableOpenDir()
// 指定输出目录
.outputDir(projectPath + File.separator + modelName + "/src/main/java");
})
.packageConfig(builder -> {
// 设置父包名
builder.parent("com.bdsoft")
.mapper("dao")
// 设置父包模块名
.moduleName("recruit.gateway")
// 设置mapperXml生成路径
.pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + File.separator + modelName + "/src/main/resources/mapper/"));
})
.strategyConfig(builder -> {
StrategyConfig.Builder configBuild = builder.addInclude(tableName);
// 实体属性设置
Entity.Builder entityBuild = configBuild.entityBuilder().fileOverride().enableTableFieldAnnotation().enableRemoveIsPrefix().addTableFills(tableFillList);
Mapper.Builder mapperBuilder = configBuild.mapperBuilder().fileOverride();
Service.Builder serviceBuilder = configBuild.serviceBuilder();
Controller.Builder controllerBuilder = configBuild.controllerBuilder();
if (startWithModelName) { // 如果以模块为前缀,设置模块名
boolean upperCase = Character.isUpperCase(modelName.charAt(0));
String convertModelName = StrUtil.isNotBlank(modelName) ? modelName.substring(0, 1).toUpperCase() + modelName.substring(1) : "";
if (upperCase) {
System.out.println(convertModelName);
}
entityBuild.formatFileName(convertModelName + "%s" + ConstVal.ENTITY);
mapperBuilder.formatMapperFileName(convertModelName + "%s" + ConstVal.MAPPER)
.formatXmlFileName(convertModelName + "%s" + ConstVal.MAPPER);
if (startWithI) { // "I" +
serviceBuilder.formatServiceFileName("I" + convertModelName + "%s" + ConstVal.SERVICE);
} else {
serviceBuilder.formatServiceFileName(convertModelName + "%s" + ConstVal.SERVICE);
}
serviceBuilder.formatServiceFileName(convertModelName + "%s" + ConstVal.SERVICE)
.formatServiceImplFileName(convertModelName + "%s" + ConstVal.SERVICE_IMPL);
controllerBuilder.formatFileName(convertModelName + "%s" + ConstVal.CONTROLLER);
} else {
if (!startWithI) { // 不适用i开头
serviceBuilder.formatServiceFileName("%s" + ConstVal.SERVICE);
}
}
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}
按照这段配置,生成之后的样式是:
当然生成的大部分都已经生成了,其中还有一些细节需要自己改动
比如
- 生成文件的名称
- controller里的RequestMapping
- Mapper里加上@Mapper
- Service中注入mapper
- xml中namespace是否正确
生成没有swagger注解的
去看我的第一篇文章 mybatis-plus快速上手_Wmenghu的博客-CSDN博客
里面可能有的jar不能用,如果因为springboot版本的问题不能用,那就用这个文章的jar应该也可以