mybatis-plus-boot-starter 3.5.1
MybatisPlus
统一映射接口
BaseMapper.class
主键策略
ID生成器
public enum IdType {
AUTO(0), 数据库自增id
NONE(1), 未设置主键
INPUT(2), 手动输入
ASSIGN_ID(3), 分配id
ASSIGN_UUID(4); 分配id工具
数据加密
新代码生成器
# 数据库配置(DataSourceConfig)
# 基础配置
属性 |
说明 |
示例 |
url |
jdbc 路径 |
jdbc:mysql://127.0.0.1:3306/mybatis-plus |
username |
数据库账号 |
root |
password |
数据库密码 |
123456 |
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
.build();
# 可选配置
方法 |
说明 |
示例 |
dbQuery(IDbQuery) |
数据库查询 |
new MySqlQuery() |
schema(String) |
数据库 schema(部分数据库适用) |
mybatis-plus |
typeConvert(ITypeConvert) |
数据库类型转换器 |
new MySqlTypeConvert() |
keyWordsHandler(IKeyWordsHandler) |
数据库关键字处理器 |
new MySqlKeyWordsHandler() |
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
.dbQuery(new MySqlQuery())
.schema("mybatis-plus")
.typeConvert(new MySqlTypeConvert())
.keyWordsHandler(new MySqlKeyWordsHandler())
.build();
# 全局配置(GlobalConfig)
方法 |
说明 |
示例 |
fileOverride |
覆盖已生成文件 |
默认值:false |
disableOpenDir |
禁止打开输出目录 |
默认值:true |
outputDir(String) |
指定输出目录 |
/opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp |
author(String) |
作者名 |
baomidou 默认值:作者 |
enableKotlin |
开启 kotlin 模式 |
默认值:false |
enableSwagger |
开启 swagger 模式 |
默认值:false |
dateType(DateType) |
时间策略 |
DateType.ONLY_DATE 默认值: DateType.TIME_PACK |
commentDate(String) |
注释日期 |
默认值: yyyy-MM-dd |
new GlobalConfig.Builder()
.fileOverride()
.outputDir("/opt/baomidou")
.author("baomidou")
.enableKotlin()
.enableSwagger()
.dateType(DateType.TIME_PACK)
.commentDate("yyyy-MM-dd")
.build();
# 包配置(PackageConfig)
方法 |
说明 |
示例 |
parent(String) |
父包名 |
默认值:com.baomidou |
moduleName(String) |
父包模块名 |
默认值:无 |
entity(String) |
Entity 包名 |
默认值:entity |
service(String) |
Service 包名 |
默认值:service |
serviceImpl(String) |
Service Impl 包名 |
默认值:service.impl |
mapper(String) |
Mapper 包名 |
默认值:mapper |
mapperXml(String) |
Mapper XML 包名 |
默认值:mapper.xml |
controller(String) |
Controller 包名 |
默认值:controller |
other(String) |
自定义文件包名 |
输出自定义文件时所用到的包名 |
pathInfo(Map<OutputFile, String>) |
路径配置信息 |
Collections.singletonMap(OutputFile.mapperXml, "D://") |
new PackageConfig.Builder()
.parent("com.baomidou.mybatisplus.samples.generator")
.moduleName("sys")
.entity("po")
.service("service")
.serviceImpl("service.impl")
.mapper("mapper")
.mapperXml("mapper.xml")
.controller("controller")
.other("other")
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"))
.build();
# 模板配置(TemplateConfig)
方法 |
说明 |
示例 |
disable |
禁用所有模板 |
|
disable(TemplateType...) |
禁用模板 |
TemplateType.ENTITY |
entity(String) |
设置实体模板路径(JAVA) |
/templates/entity.java |
entityKt(String) |
设置实体模板路径(kotlin) |
/templates/entity.java |
service(String) |
设置 service 模板路径 |
/templates/service.java |
serviceImpl(String) |
设置 serviceImpl 模板路径 |
/templates/serviceImpl.java |
mapper(String) |
设置 mapper 模板路径 |
/templates/mapper.java |
mapperXml(String) |
设置 mapperXml 模板路径 |
/templates/mapper.xml |
controller(String) |
设置 controller 模板路径 |
/templates/controller.java |
new TemplateConfig.Builder()
.disable(TemplateType.ENTITY)
.entity("/templates/entity.java")
.service("/templates/service.java")
.serviceImpl("/templates/serviceImpl.java")
.mapper("/templates/mapper.java")
.mapperXml("/templates/mapper.xml")
.controller("/templates/controller.java")
.build();
# 注入配置(InjectionConfig)
方法 |
说明 |
示例 |
beforeOutputFile(BiConsumer<TableInfo, Map<String, Object>>) |
输出文件之前消费者 |
|
customMap(Map<String, Object>) |
自定义配置 Map 对象 |
Collections.singletonMap("test", "baomidou") |
customFile(Map<String, String>) |
自定义配置模板文件 |
Collections.singletonMap("test.txt", "/templates/test.vm") |
new InjectionConfig.Builder()
.beforeOutputFile((tableInfo, objectMap) -> {
System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
})
.customMap(Collections.singletonMap("test", "baomidou"))
.customFile(Collections.singletonMap("test.txt", "/templates/test.vm"))
.build();
# 策略配置(StrategyConfig)
方法 |
说明 |
示例 |
enableCapitalMode |
开启大写命名 |
默认值:false |
enableSkipView |
开启跳过视图 |
默认值:false |
disableSqlFilter |
禁用 sql 过滤 |
默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关 |
enableSchema |
启用 schema |
默认值:false,多 schema 场景的时候打开 |
likeTable(LikeTable) |
模糊表匹配(sql 过滤) |
likeTable 与 notLikeTable 只能配置一项 |
notLikeTable(LikeTable) |
模糊表排除(sql 过滤) |
likeTable 与 notLikeTable 只能配置一项 |
addInclude(String...) |
增加表匹配(内存过滤) |
include 与 exclude 只能配置一项 |
addExclude(String...) |
增加表排除匹配(内存过滤) |
include 与 exclude 只能配置一项 |
addTablePrefix(String...) |
增加过滤表前缀 |
|
addTableSuffix(String...) |
增加过滤表后缀 |
|
addFieldPrefix(String...) |
增加过滤字段前缀 |
|
addFieldSuffix(String...) |
增加过滤字段后缀 |
|
entityBuilder |
实体策略配置 |
|
controllerBuilder |
controller 策略配置 |
|
mapperBuilder |
mapper 策略配置 |
|
serviceBuilder |
service 策略配置 |
|
new StrategyConfig.Builder()
.enableCapitalMode()
.enableSkipView()
.disableSqlFilter()
.likeTable(new LikeTable("USER"))
.addInclude("t_simple")
.addTablePrefix("t_", "c_")
.addFieldSuffix("_flag")
.build();
# Entity 策略配置
方法 |
说明 |
示例 |
nameConvert(INameConvert) |
名称转换实现 |
|
superClass(Class<?>) |
设置父类 |
BaseEntity.class |
superClass(String) |
设置父类 |
com.baomidou.global.BaseEntity |
disableSerialVersionUID |
禁用生成 serialVersionUID |
默认值:true |
enableColumnConstant |
开启生成字段常量 |
默认值:false |
enableChainModel |
开启链式模型 |
默认值:false |
enableLombok |
开启 lombok 模型 |
默认值:false |
enableRemoveIsPrefix |
开启 Boolean 类型字段移除 is 前缀 |
默认值:false |
enableTableFieldAnnotation |
开启生成实体时生成字段注解 |
默认值:false |
enableActiveRecord |
开启 ActiveRecord 模型 |
默认值:false |
versionColumnName(String) |
乐观锁字段名(数据库) |
|
versionPropertyName(String) |
乐观锁属性名(实体) |
|
logicDeleteColumnName(String) |
逻辑删除字段名(数据库) |
|
logicDeletePropertyName(String) |
逻辑删除属性名(实体) |
|
naming |
数据库表映射到实体的命名策略 |
默认下划线转驼峰命名:NamingStrategy.underline_to_camel |
columnNaming |
数据库表字段映射到实体的命名策略 |
默认为 null,未指定按照 naming 执行 |
addSuperEntityColumns(String...) |
添加父类公共字段 |
|
addIgnoreColumns(String...) |
添加忽略字段 |
|
addTableFills(IFill...) |
添加表字段填充 |
|
addTableFills(List)
|
添加表字段填充 |
|
idType(IdType) |
全局主键类型 |
|
convertFileName(ConverterFileName) |
转换文件名称 |
|
formatFileName(String) |
格式化文件名称 |
|
new StrategyConfig.Builder()
.entityBuilder()
.superClass(BaseEntity.class)
.disableSerialVersionUID()
.enableChainModel()
.enableLombok()
.enableRemoveIsPrefix()
.enableTableFieldAnnotation()
.enableActiveRecord()
.versionColumnName("version")
.versionPropertyName("version")
.logicDeleteColumnName("deleted")
.logicDeletePropertyName("deleteFlag")
.naming(NamingStrategy.no_change)
.columnNaming(NamingStrategy.underline_to_camel)
.addSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time")
.addIgnoreColumns("age")
.addTableFills(new Column("create_time", FieldFill.INSERT))
.addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
.idType(IdType.AUTO)
.formatFileName("%sEntity")
.build();
# Controller 策略配置
方法 |
说明 |
示例 |
superClass(Class<?>) |
设置父类 |
BaseController.class |
superClass(String) |
设置父类 |
com.baomidou.global.BaseController |
enableHyphenStyle |
开启驼峰转连字符 |
默认值:false |
enableRestStyle |
开启生成@RestController 控制器 |
默认值:false |
convertFileName(ConverterFileName) |
转换文件名称 |
|
formatFileName(String) |
格式化文件名称 |
|
new StrategyConfig.Builder()
.controllerBuilder()
.superClass(BaseController.class)
.enableHyphenStyle()
.enableRestStyle()
.formatFileName("%sAction")
.build();
# Service 策略配置
方法 |
说明 |
示例 |
superServiceClass(Class<?>) |
设置 service 接口父类 |
BaseService.class |
superServiceClass(String) |
设置 service 接口父类 |
com.baomidou.global.BaseService |
superServiceImplClass(Class<?>) |
设置 service 实现类父类 |
BaseServiceImpl.class |
superServiceImplClass(String) |
设置 service 实现类父类 |
com.baomidou.global.BaseServiceImpl |
convertServiceFileName(ConverterFileName) |
转换 service 接口文件名称 |
|
convertServiceImplFileName(ConverterFileName) |
转换 service 实现类文件名称 |
|
formatServiceFileName(String) |
格式化 service 接口文件名称 |
|
formatServiceImplFileName(String) |
格式化 service 实现类文件名称 |
|
new StrategyConfig.Builder()
.serviceBuilder()
.superServiceClass(BaseService.class)
.superServiceImplClass(BaseServiceImpl.class)
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImp")
.build();
# Mapper 策略配置
方法 |
说明 |
示例 |
superClass(Class<?>) |
设置父类 |
BaseMapper.class |
superClass(String) |
设置父类 |
com.baomidou.global.BaseMapper |
enableMapperAnnotation |
开启 @Mapper 注解 |
默认值:false |
enableBaseResultMap |
启用 BaseResultMap 生成 |
默认值:false |
enableBaseColumnList |
启用 BaseColumnList |
默认值:false |
cache(Class<? extends Cache>) |
设置缓存实现类 |
MyMapperCache.class |
convertMapperFileName(ConverterFileName) |
转换 mapper 类文件名称 |
|
convertXmlFileName(ConverterFileName) |
转换 xml 文件名称 |
|
formatMapperFileName(String) |
格式化 mapper 文件名称 |
|
formatXmlFileName(String) |
格式化 xml 实现类文件名称 |
|
new StrategyConfig.Builder()
.mapperBuilder()
.superClass(BaseMapper.class)
.enableMapperAnnotation()
.enableBaseResultMap()
.enableBaseColumnList()
.cache(MyMapperCache.class)
.formatMapperFileName("%sDao")
.formatXmlFileName("%sXml")
.build();
使用方法codegenergtor代码构造示例
方式一
mybatis-plus3.5.0
**
* @author zzy
* @create
* @desc
* @return
*
* 3.5.0之后的代码构建写发法
* 先设置数据源构建
* 1. DataSourceConfig.Builder
*
* 2.全局配置
* 目录生成名,
* 作者
* 完成时是否打开文件夹
* 实体属性Swagger2注解
**/
@SuppressWarnings("all")
public class CodeGenerator {
//数据源
private final String URL="jdbc:mysql://localhost:3306/db_mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8";
private final String USER_NAME = "root";
private final String PASSWORD = "zhuangzeyong";
//是否开启swagger
private final Boolean ENALBESWAGGER = false;
//生成路径配置
private final String PACKEGER_NAME = "mybatisplus.mp.book";
public void main(String[] args) {
//1 构建数据源
DataSourceConfig.Builder databuilder =
new DataSourceConfig.Builder(
URL,USER_NAME,PASSWORD);
//2 全局配置
GlobalConfig.Builder globalconfig = new GlobalConfig.Builder();
//输出指定目录
String property = System.getProperty("mp.dir");
globalconfig.outputDir(property + "/src/main/java/mybatisplus/mp");
//作者
globalconfig.author("zzy");
// 结束时是否打开文件夹
globalconfig.openDir(true);
// 实体属性Swagger2注解
if (ENALBESWAGGER) {
globalconfig.enableSwagger();
}
//时间策略
globalconfig.dateType(DateType.TIME_PACK);
//注释日期格式
globalconfig.commentDate("yyy/mm/dd");
//3.生成包路径配置
PackageConfig.Builder packegconfig = new PackageConfig.Builder();
//项目路径生成
packegconfig.parent(PACKEGER_NAME);
packegconfig.entity("entity");
packegconfig.mapper("mapper");
//4.策略生成
StrategyConfig.Builder startegyconfig = new StrategyConfig.Builder();
//目标数据库 表名
startegyconfig.addInclude("book");
//entity实体类生成配置
startegyconfig
.entityBuilder()
.enableLombok() //开启lombok
.enableTableFieldAnnotation() //生成时添加注解
.idType(IdType.AUTO); //全局主键类型策略
//mapper层生成配置
startegyconfig.mapperBuilder()
//继承业务逻辑接口
.superClass(BaseMapper.class);
//controller生成配置
startegyconfig.controllerBuilder()
.enableHyphenStyle()
.enableRestStyle();
//5.代码构建生成器
AutoGenerator autoGenerator = new AutoGenerator(databuilder.build());
//数据源
autoGenerator.getDataSource();
//全局配置
autoGenerator.getGlobalConfig();
//包路径配置
autoGenerator.getPackageInfo();
//执行
autoGenerator.execute();
}
}
方式二(推荐)
mybatis-plus3.5.1
package mybatisplus.mp.codegenerator;
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.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Collections;
import java.util.Scanner;
public class CodeGen {
//数据源
private static final String USER_NAME = "root";
private static final String PASSWORD = "zhuangzeyong";
//生成目标路径
private static final String PACKEGER_NAME = "src.main.java.mybatisplus.mp";
//输入工具
//输入模块名 , 表名
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 + "!");
}
//是否需要更换数据库
//是 请输入数据库名 用户名 密码 表名
public static void main(String[] args) {
FastAutoGenerator.create(
"jdbc:mysql://localhost:3306/"+scanner("数据库名")+"?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8",
USER_NAME,
PASSWORD)
//全局配置
.globalConfig(builder -> {
builder.author("zzy") // 设置作者
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("F://mp"); // 指定输出目录
})
//包配置
.packageConfig(builder -> {
builder.parent(PACKEGER_NAME) // 代码生成路标路径
.moduleName(scanner("模块名")) // 设置总的模块名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "F://mp")); // 设置该表的映射文件mapperXml生成路径
})
//策略配置
.strategyConfig(builder -> {
builder
// 目标数据库mysql table表名 ---生成--- >java实体类
.addInclude(scanner("表名,多个英文逗号分割").split(","))
//添加过滤器
.addTablePrefix("tb_", "c_")
//-------------------可以默认不配,细节可自行配置--------------------------
//实体类配置
.entityBuilder()
//控制层配置
.controllerBuilder()
//事务层配置
.serviceBuilder()
//映射层配置
.mapperBuilder();
; // 设置过滤表前缀
})
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}