MyBatis-Plus提供FastAutoGenerator代码生成器,根据数据库中已经存在的表,生成Entity、Mapper、Mapper XML、Service、Controller等各个模块的代码,可以极大的提升开发效率。
1、添加依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 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>
2、创建快速代码生成器
public class GeneratorUtil {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8", "username", "password")
//全局配置
.globalConfig(builder -> {
builder.author("hepburn") // 设置作者
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("/home/demo/src/main/java/"); // 指定输出目录
})
//包配置
.packageConfig(builder -> {
builder.parent("com.example.demo") // 设置父包名
.moduleName("domain") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "/home/demo/src/main/resources/mybatis/mapper")); // 设置mapperXml生成路径
})
//策略配置
.strategyConfig(builder -> {
builder.addInclude("specifications", "sensitive_types", "sensitive_levels", "sensitive_elements", "sensitive_elements_rules", "detection_strategies", "algorithm_models", "algorithm_labels", "strategys") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
//.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}
3、修改application.properties配置文件
#mysql
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.hikari.minimum-idle=3
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.max-lifetime=30000
spring.datasource.hikari.connection-test-query=SELECT 1
#mybatis-plus
mybatis-plus.mapper-locations=classpath*:mybatis/mapper/*Mapper.xml
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
4、运行GeneratorUtil生成代码
执行完成。就可以看到项目结构和文件已经生成好了。
配置说明
1. 数据库配置(DataSourceConfig)
1.1 基础配置
属性 |
说明 |
示例 |
url |
jdbc路径 |
jdbc:mysql://localhost:3306/(数据库名称) |
username |
数据库账号 |
root |
password |
数据库密码 |
123456 |
1.2 可选配置
方法 |
说明 |
示例 / 参数 |
dbQuery(IDbQuery) |
数据库查询 |
new MySqlQuery() |
schema(String) |
数据库 schema(部分数据库适用) |
mybatis-plus |
typeConvert(ITypeConvert) |
数据库类型转换器 |
new MySqlTypeConvert() |
keyWordsHandler(IKeyWordsHandler) |
数据库关键字处理器 |
new MySqlKeyWordsHandler() |
2. 全局配置(GlobalConfig)
方法 |
说明 |
示例 / 参数 |
fileOverride |
覆盖已生成文件 |
默认值:false |
disableOpenDir |
禁止打开输出目录 |
默认值:true |
outputDir(String) |
指定输出目录 |
projectPath + “/src/main/java”(当前工程路径+"/src/main/java") |
author(String) |
作者名 |
vinjcent |
enableKotlin |
开启 kotlin 模式 |
默认值:false |
enableSwagger |
开启 swagger 模式 |
默认值:false |
dateType(DateType) |
时间类型 |
ONLY_DATE、SQL_PACK、TIME_PACK(jdk1.8以上才支持,推荐使用) |
commentDate(String) |
注释日期 |
默认值:yyyy-MM-dd,可使用"“yyyy-MM-dd HH:mm:ss”" |
3. 包配置(PackageConfig)
方法 |
说明 |
示例 / 参数 |
parent(String) |
父包名 |
默认值:com.vinjcent |
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) |
自定义文件包名 |
可使用"other",生产一个other文件目录 |
pathInfo(Map<OutputFile, String>) |
路径配置信息 |
Collections.singletonMap(OutputFile.mapperXml, “D://”) |
4. 模板配置(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 |
5. 注入配置(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”) |
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…) |
增加过滤表前缀 |
|
addTablePrefix(String…) |
增加过滤表前缀 |
|
addTableSuffix(String…) |
增加过滤表后缀 |
|
addFieldPrefix(String…) |
增加过滤字段前缀 |
|
addFieldSuffix(String…) |
增加过滤字段后缀 |
|
entityBuilder |
实体策略配置 |
|
controllerBuilder |
controller 策略配置 |
|
mapperBuilder |
mapper 策略配置 |
|
serviceBuilder |
service 策略配置 |
|
6.1 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) |
格式化文件名称 |
|
6.2 Controller 策略配置
方法 |
说明 |
示例 / 参数 |
superClass(Class<?>) |
设置父类 |
BaseController.class |
superClass(String) |
设置父类 |
com.baomidou.global.BaseController |
enableHyphenStyle |
开启驼峰转连字符 |
默认值:false |
enableRestStyle |
开启生成@RestController 控制器 |
默认值:false |
convertFileName(ConverterFileName) |
转换文件名称 |
|
formatFileName(String) |
格式化文件名称 |
|
6.3 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 实现类文件名称 |
|
6.4 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 实现类文件名称 |
|