作者:大三的土狗
专栏:MyBatis-Plus
注意
适用版本:mybatis-plus-generator 3.5.1 以下版本
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速根据数据表自动生成实体类、Mapper、Service、ServiceImpl、Controller等各个模块的代码,极大的提升了开发效率。
添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。
Velocity(默认):
<dependency>
<groupId>org.apache.velocitygroupId>
<artifactId>velocity-engine-coreartifactId>
<version>最新版本version>
dependency>
Freemarker:
<dependency>
<groupId>org.freemarkergroupId>
<artifactId>freemarkerartifactId>
<version>最新版本version>
dependency>
Beetl:
<dependency>
<groupId>com.ibeetlgroupId>
<artifactId>beetlartifactId>
<version>最新版本version>
dependency>
我们选用默认的
在 pom.xml 导入 MyBatis Plus Generator 的依赖
com.baomidou
mybatis-plus-generator
3.3.1.tmp
org.apache.velocity
velocity
1.7
这里是生成的位置作者
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
globalConfig.setAuthor("jobob");
globalConfig.setOpen(false);
这里是数据库的连接信息
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ant?useUnicode=true&useSSL=false&characterEncoding=utf8");
dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("password");
详细代码如下:
package com.example.mybatisplus;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class Main {
public static void main(String[] args) {
//1、创建generator对象
AutoGenerator autoGenerator = new AutoGenerator();
//数据源
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL);
dataSourceConfig.setUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("root");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
autoGenerator.setDataSource(dataSourceConfig); //设置数据源
//2、全局配置
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOutputDir(System.getProperty("user.dir")+"/src/main/java");
globalConfig.setOpen(false); //是否打开输出目录
globalConfig.setAuthor("xmp"); //作者
globalConfig.setServiceName("%sService"); //设置生成的service接口的名字不带I
autoGenerator.setGlobalConfig(globalConfig); //设置全局配置
//3、包信息
PackageConfig packageConfig = new PackageConfig(); //包配置
packageConfig.setParent("com.example.mybatisplus"); //设置父包名
packageConfig.setModuleName("generator"); // 设置子包名
packageConfig.setController("controller"); //设置控制器包名
packageConfig.setService("service");
packageConfig.setServiceImpl("service.impl");
packageConfig.setMapper("mapper");
packageConfig.setEntity("entity");
autoGenerator.setPackageInfo(packageConfig); //设置包配置
//4、配置策略
StrategyConfig strategyConfig = new StrategyConfig(); //策略配置
strategyConfig.setEntityLombokModel(true); //是否使用lombok
strategyConfig.setNaming(NamingStrategy.underline_to_camel); //数据库表映射到实体的命名策略
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); //数据库表字段映射到实体的命名策略
autoGenerator.setStrategy(strategyConfig); //设置策略配置
autoGenerator.execute(); //执行生成
}
}
com.baomidou
mybatis-plus-generator
最新版本
注意
当前包未传递依赖 MP 包、mysql等,需要自己引入!
FastAutoGenerator.create("url", "username", "password")
.globalConfig(builder -> {
builder.author("baomidou") // 设置作者
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("D://"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
.moduleName("system") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, "D://")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("t_simple") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
FastAutoGenerator.create(DATA_SOURCE_CONFIG)
// 全局配置
.globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称?")).fileOverride())
// 包配置
.packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?")))
// 策略配置
.strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
.controllerBuilder().enableRestStyle().enableHyphenStyle()
.entityBuilder().enableLombok().addTableFills(
new Column("create_time", FieldFill.INSERT)
).build())
/*
模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker
.templateEngine(new BeetlTemplateEngine())
.templateEngine(new FreemarkerTemplateEngine())
*/
.execute();
// 处理 all 情况
protected static List getTables(String tables) {
return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}
基础配置
属性 | 说明 | 示例 |
---|---|---|
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();
方法 | 说明 | 示例 |
---|---|---|
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();
方法 | 说明 | 示例 |
---|---|---|
parent(String) | 父包名 | 默认值:com.baomidou |
moduleName(String) | 父包模块名 | 默认值:无 |
entity(String) | Entity 包名 | 默认值:entity |
service(String) | Service 包名 | 默认值:service |
serviceImpl(String) | Service Impl 包名 | 默认值:service.impl |
mapper(String) | Mapper 包名 | 默认值:mapper |
xml(String) | Mapper XML 包名 | 默认值:mapper.xml |
controller(String) | Controller 包名 | 默认值:controller |
other(String) | 自定义文件包名 | 输出自定义文件时所用到的包名 |
pathInfo(Map |
路径配置信息 | 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")
.xml("mapper.xml")
.controller("controller")
.other("other")
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"))
.build();
方法 | 说明 | 示例 |
---|---|---|
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();
方法 | 说明 | 示例 |
---|---|---|
beforeOutputFile(BiConsumer |
输出文件之前消费者 | |
customMap(Map |
自定义配置 Map 对象 | Collections.singletonMap(“test”, “baomidou”) |
customFile(Map |
自定义配置模板文件 | 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();
6、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 策略配置 |
其他具体详细配置参考:https://baomidou.com/pages/981406/#service-%E7%AD%96%E7%95%A5%E9%85%8D%E7%BD%AE