mybatis-plus 官网: https://baomidou.com/
上面的资料很全,本文以3.5.1 为例子
code-demo
com.uu
1.0.0
4.0.0
mybatis-plus-generator
8
8
3.5.2
3.5.1
com.baomidou
mybatis-plus
${mybatis-plus.version}
com.baomidou
mybatis-plus-generator
${mybatis-plus-generator.version}
5.2.15.RELEASE
2.3.12.RELEASE
org.freemarker
freemarker
org.apache.velocity
velocity-engine-core
2.0
mysql
mysql-connector-java
runtime
io.springfox
springfox-swagger2
2.9.2
org.springframework
spring-webmvc
${spring.version}
org.springframework.boot
spring-boot-dependencies
${spring.boot.version}
pom
import
package com.xx;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* https://baomidou.com/pages/779a6e/ 新
*
* https://baomidou.com/pages/d357af/ 旧(参数详解)
*
* 自定义模板有哪些可用参数?Github (opens new window)AbstractTemplateEngine 类中方法 getObjectMap 返回 objectMap 的所有值都可用。
*/
public class Generator {
public static void main(String[] args) {
String userDir = System.getProperty("user.dir");
String finalProjectPath = userDir + "/mybatis-plus-generator";
System.out.println(finalProjectPath);
FastAutoGenerator.create("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8", "root", "root")
.globalConfig(builder -> {
builder.author("kanan") // 设置作者
.fileOverride()
.enableSwagger() // 开启 swagger 模式
.disableOpenDir() //禁止打开输出目录
.outputDir(finalProjectPath + "/src/main/java"); // 指定配置文件输出目录
})
.packageConfig(builder -> {
builder.parent("com.xx") // 设置父包名
.moduleName("gen") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, finalProjectPath + "/src/main/resources/mapper")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
// 需要被解析的表名
builder.addInclude("mind_user");
// 开启lombok
builder.entityBuilder().enableLombok().enableTableFieldAnnotation();
// 生成 restcontroller
builder.controllerBuilder().enableRestStyle();
})
.injectionConfig(consumer -> {
Map customFile = new HashMap<>();
// 下面的key会作为类名后缀,进而生成新类
customFile.put("DTO.java", "/templates/entityDTO.java.ftl");
consumer.customFile(customFile);
})
.templateEngine(new EnhanceFreemarkerTemplateEngine())
.execute();
}
}
该类继承了默认的FreemarkerTemplateEngine,重写outputCustomFile方法,主要差异点是指定新类的生成路径
package com.xx;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.util.Map;
public class EnhanceFreemarkerTemplateEngine extends FreemarkerTemplateEngine {
@Override
protected void outputCustomFile(@NotNull Map customFile, @NotNull TableInfo tableInfo, @NotNull Map objectMap) {
// objectMap 里的key可以在ftl文件中直接引用
// https://copyfuture.com/blogs-details/20210404114118659h
String entityName = tableInfo.getEntityName();
String otherPath = this.getPathInfo(OutputFile.other);
customFile.forEach((key, value) -> {
// 拼接生成路径
String fileName = String.format(otherPath + File.separator + entityName + "%s", key);
System.out.println(fileName);
this.outputFile(new File(fileName), objectMap, value);
});
}
}
1、模板文件主要在上面 injectionConfig 里进行配置,用key-value的方式进行配置,可以配置多个;
2、如果配置多个,则在自定义的EnhanceFreemarkerTemplateEngine 类 outputCustomFile方法会被调用多次;
3、customFile参数就是在injectionConfig里注入的map
4、ftl文件我们可以用 mybatis-plus-generator 里自带的模板文件进行修改的来;ftl文件里有很多变量,我们可以在outputCustomFile方法的objectMap参数里获得
附上我未完成的模板文件
package ${package.Other};
<#list table.importPackages as pkg>
import ${pkg};
#list>
import lombok.Getter;
import lombok.Setter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
*
* DTO
*
*
* @author ${author}
* @since ${date}
*/
@Getter
@Setter
public class ${entity}DTO implements Serializable {
private static final long serialVersionUID = 1L;
<#-- ---------- BEGIN 字段循环遍历 ---------->
<#list table.fields as field>
private ${field.propertyType} ${field.propertyName};
#list>
<#------------ END 字段循环遍历 ---------->
}
其他:
自定义模板有哪些可用参数?Github (opens new window)AbstractTemplateEngine 类中方法 getObjectMap 返回 objectMap 的所有值都可用。
最终生成结果
代码已上传到: https://gitee.com/aqu415/demo/tree/master/mybatis-plus-generator 可以下载下来调试
over~~