一、概述
官方原话
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率
配置环境
- 开发工具 IDEA
- JDK 15
- 数据库Mysql
- 基于SpringBoot开发框架
二、导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</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>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
</dependencies>
三、运行类(放在测试类中即可)
package com.vinjcent;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;
public class Generator {
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSl=true";
private static final String JDBC_USER_NAME = "root";
private static final String JDBC_PASSWORD = "123456";
private static final String PACKAGE_NAME = "com.vinjcent";
private static final String MODULE_NAME = "demo";
private static final String[] TBL_NAMES = {"student", "subject", "sheet"};
private static final String TABLE_PREFIX = "tbl_";
public static void main(String[] args) {
String projectPath = System.getProperty("user.dir");
DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(JDBC_URL, JDBC_USER_NAME,
JDBC_PASSWORD)
.dbQuery(new MySqlQuery())
.typeConvert(new MySqlTypeConvert())
.keyWordsHandler(new MySqlKeyWordsHandler());
FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(dataSourceConfigBuilder);
fastAutoGenerator.globalConfig(
globalConfigBuilder -> globalConfigBuilder
.fileOverride()
.disableOpenDir()
.outputDir(projectPath + "/src/main/java")
.author("vinjcent")
.commentDate("yyyy-MM-dd HH:mm:ss")
.dateType(DateType.TIME_PACK)
.enableSwagger()
);
fastAutoGenerator.packageConfig(
packageConfigBuilder -> packageConfigBuilder
.parent(PACKAGE_NAME)
.entity("pojo")
.mapper("dao")
.service("service")
.serviceImpl("service.impl")
.controller("controller")
.xml("dao.xml")
.pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + SERVICE_PROJECT_PATH + "\\src\\main" + XML_OUTPUT_PATH))
);
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder
.enableCapitalMode()
.enableSkipView()
.disableSqlFilter()
.addInclude(TBL_NAMES)
.addTablePrefix(TABLE_PREFIX)
);
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.entityBuilder()
.enableTableFieldAnnotation()
.naming(NamingStrategy.underline_to_camel)
.columnNaming(NamingStrategy.underline_to_camel)
.idType(IdType.AUTO)
.enableLombok()
.logicDeleteColumnName("deleted")
.logicDeletePropertyName("deleted")
.addTableFills(new Column("create_time", FieldFill.INSERT))
.addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
.versionColumnName("version")
.disableSerialVersionUID()
.enableChainModel()
.formatFileName("%sEntity")
);
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder()
.enableRestStyle()
.enableHyphenStyle()
);
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.serviceBuilder()
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl"));
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.mapperBuilder()
.enableMapperAnnotation()
.formatMapperFileName("%sMapper")
.formatXmlFileName("%sMapper"));
fastAutoGenerator.execute();
}
}
结果

四、配置说明
4.1 数据库配置(DataSourceConfig)
基础配置
属性 | 说明 | 示例 |
---|
url | jdbc路径 | jdbc:mysql://localhost:3306/(数据库名称) |
username | 数据库账号 | root |
password | 数据库密码 | 123456 |
可选配置
方法 | 说明 | 示例 / 参数 |
---|
dbQuery(IDbQuery) | 数据库查询 | new MySqlQuery() |
schema(String) | 数据库 schema(部分数据库适用) | mybatis-plus |
typeConvert(ITypeConvert) | 数据库类型转换器 | new MySqlTypeConvert() |
keyWordsHandler(IKeyWordsHandler) | 数据库关键字处理器 | new MySqlKeyWordsHandler() |
4.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”" |
4.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.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 |
4.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”) |
4.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 策略配置 | |
4.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) | 格式化文件名称 | |
4.6.2 Controller 策略配置
方法 | 说明 | 示例 / 参数 |
---|
superClass(Class<?>) | 设置父类 | BaseController.class |
superClass(String) | 设置父类 | com.baomidou.global.BaseController |
enableHyphenStyle | 开启驼峰转连字符 | 默认值:false |
enableRestStyle | 开启生成@RestController 控制器 | 默认值:false |
convertFileName(ConverterFileName) | 转换文件名称 | |
formatFileName(String) | 格式化文件名称 | |
4.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 实现类文件名称 | |
4.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 实现类文件名称 | |
注意
使用时,先看清楚归于哪一类的配置,避免出现找不到的情况!
五、使用自定义格式输出文件(FreeMarkerTemplate模板引擎)
package com.vinjcent.myabtis;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;
import java.util.Collections;
public class Generator {
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSl=true";
private static final String JDBC_USER_NAME = "root";
private static final String JDBC_PASSWORD = "123456";
private static final String PROJECT_PATH = "/com-common-service";
private static final String PACKAGE_NAME = "/com/vinjcent";
private static final String SERVICE_PROJECT_PATH = "/com-mybatis";
private static final String[] TBL_NAMES = {"tbl_employee"};
private static final String TABLE_PREFIX = "tbl_";
private static final String ENTITY_PATH = "/domain/entity/";
private static final String MAPPER_PATH = "/mapper/";
private static final String XML_PATH = "/resources/mybatis/mapper/";
private static final String SERVICE_PATH = "/service/";
private static final String SERVICE_IMPL_PATH = "/service/impl/";
private static final String CONTROLLER_PATH = "/controller/";
private static final String MAPPER_OUTPUT_MODULE = "module";
private static final String XML_OUTPUT_MODULE = "module";
private static final String SERVICE_OUTPUT_MODULE = "module";
private static final String CONTROLLER_OUTPUT_MODULE = "module";
private static final String ENTITY_TEMPLATE = "templates/entity.java";
private static final String ENTITY_OUTPUT_PATH = ENTITY_PATH + MAPPER_OUTPUT_MODULE;
private static final String XML_TEMPLATE = "templates/mapper.xml";
private static final String XML_OUTPUT_PATH = XML_PATH + XML_OUTPUT_MODULE;
private static final String MAPPER_TEMPLATE = "templates/mapper.java";
private static final String MAPPER_OUTPUT_PATH = MAPPER_PATH + MAPPER_OUTPUT_MODULE;
private static final String SERVICE_TEMPLATE = "templates/service.java";
private static final String SERVICE_OUTPUT_PATH = SERVICE_PATH + SERVICE_OUTPUT_MODULE;
private static final String SERVICE_IMPL_TEMPLATE = "templates/serviceImpl.java";
private static final String SERVICE_IMPL_OUTPUT_PATH = SERVICE_IMPL_PATH + SERVICE_OUTPUT_MODULE;
private static final String CONTROLLER_TEMPLATE = "templates/controller.java";
private static final String CONTROLLER_OUTPUT_PATH = CONTROLLER_PATH + CONTROLLER_OUTPUT_MODULE;
public static void main(String[] args) {
String projectPath = System.getProperty("user.dir");
DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(JDBC_URL, JDBC_USER_NAME,
JDBC_PASSWORD)
.dbQuery(new MySqlQuery())
.typeConvert(new MySqlTypeConvert())
.keyWordsHandler(new MySqlKeyWordsHandler());
FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(dataSourceConfigBuilder);
fastAutoGenerator.globalConfig(
globalConfigBuilder -> globalConfigBuilder
.fileOverride()
.disableOpenDir()
.outputDir(projectPath + SERVICE_PROJECT_PATH + "/src/main/java")
.author("vinjcent")
.commentDate("yyyy-MM-dd HH:mm:ss")
.dateType(DateType.TIME_PACK)
.enableSwagger()
);
fastAutoGenerator.packageConfig(
packageConfigBuilder -> packageConfigBuilder
.parent(PACKAGE_NAME.replace('/', '.').substring(1))
.entity((ENTITY_OUTPUT_PATH).replace('/', '.').substring(1, (ENTITY_OUTPUT_PATH).length() - 1))
.mapper((MAPPER_OUTPUT_PATH).replace('/', '.').substring(1, (MAPPER_OUTPUT_PATH).length() - 1))
.service((SERVICE_OUTPUT_PATH).replace('/', '.').substring(1, (SERVICE_OUTPUT_PATH).length() - 1))
.serviceImpl((SERVICE_IMPL_OUTPUT_PATH).replace('/', '.').substring(1, (SERVICE_IMPL_OUTPUT_PATH).length() - 1))
.controller((CONTROLLER_OUTPUT_PATH).replace('/', '.').substring(1, (CONTROLLER_OUTPUT_PATH).length() - 1))
.xml("mapper")
.pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + SERVICE_PROJECT_PATH + "\\src\\main" + XML_OUTPUT_PATH))
);
fastAutoGenerator.templateConfig(
templateConfigBuilder -> templateConfigBuilder
.entity(ENTITY_TEMPLATE)
.service(SERVICE_TEMPLATE)
.serviceImpl(SERVICE_IMPL_TEMPLATE)
.controller(CONTROLLER_TEMPLATE)
.mapper(MAPPER_TEMPLATE)
.xml(XML_TEMPLATE)
);
InjectionConfig config = new InjectionConfig();
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder
.enableCapitalMode()
.enableSkipView()
.disableSqlFilter()
.addInclude(TBL_NAMES)
.addTablePrefix(TABLE_PREFIX)
);
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.entityBuilder()
.enableTableFieldAnnotation()
.naming(NamingStrategy.underline_to_camel)
.columnNaming(NamingStrategy.underline_to_camel)
.idType(IdType.AUTO)
.enableLombok()
.logicDeleteColumnName("deleted")
.logicDeletePropertyName("deleted")
.addTableFills(new Column("create_time", FieldFill.INSERT))
.addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
.versionColumnName("version")
.disableSerialVersionUID()
.enableChainModel()
.formatFileName("%s")
);
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder()
.enableRestStyle()
.enableHyphenStyle()
);
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.serviceBuilder()
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl"));
fastAutoGenerator.strategyConfig(
strategyConfigBuilder -> strategyConfigBuilder.mapperBuilder()
.enableMapperAnnotation()
.formatMapperFileName("%sMapper")
.formatXmlFileName("%sMapper"));
fastAutoGenerator.templateEngine(new FreemarkerTemplateEngine());
fastAutoGenerator.execute();
}
}
5.1 存放模板文件位置如下

【注】需要模板文件的可以后台发我消息