一、添加所需依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
- 代码生成器(新)仅需引入
mybatis-plus-generator即可 - 因本文使用freemarker模板,所以需要引入
spring-boot-starter-freemarker - 因本文生成模板使用了
lombok,所以需要引入lombok依赖,另外Idea需要安装lombok插件才能正常工作 - 自动生成器配置在测试模块中,所以引入了
junit依赖
二、创建系统日志表
CREATE TABLE `system_log` (
`id` bigint(20) NOT NULL,
`description` varchar(50) DEFAULT NULL COMMENT '日志信息描述',
`method` varchar(20) DEFAULT NULL COMMENT '方法名称',
`log_type` varchar(10) DEFAULT NULL COMMENT '日志类型 0是正常,1是异常',
`request_ip` varchar(30) DEFAULT NULL COMMENT '请求的ip',
`exception_code` varchar(50) DEFAULT NULL COMMENT '异常错误码',
`exception_detail` varchar(255) DEFAULT NULL COMMENT '异常详情',
`params` varchar(1000) DEFAULT NULL COMMENT '请求参数',
`user_id` varchar(32) DEFAULT NULL COMMENT '请求的用户id',
`delete_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除:0-否,1-是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` varchar(128) DEFAULT '' COMMENT '创建人',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '最后修改时间',
`updated_by` varchar(128) DEFAULT '' COMMENT '最后修改人',
`version` int(8) DEFAULT '0' COMMENT '版本号',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统日志表'
三、创建src\test\java\com\example\demo\config\MybatisPlusGenerator.java
package com.example.demo.config;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
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.OutputFile;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import org.junit.Test;
import java.sql.Types;
import java.util.*;
public class MybatisPlusGenerator {
private static final String DB_URL = "jdbc:mysql://localhost:3306/demo?useSSL=false";
private static final String DB_USERNAME = "root";
private static final String DB_PASSWORD = "123456";
private static final List<String> TABLES = Arrays.asList(
//"user_info",
"system_log"
);
private static final String AUTHOR = "chenzl";
private static final String PKG_PARENT = "com.example.demo";
private static final String PKG_ENTITY = "model";
private static final String PKG_MAPPER = "dao";
/**
* 数据源配置
*/
private static final DataSourceConfig DATA_SOURCE_CONFIG = new DataSourceConfig.Builder(DB_URL, DB_USERNAME, DB_PASSWORD)
//数据库 schema(部分数据库适用) mybatis-plus
//.schema("demo")
.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
int typeCode = metaInfo.getJdbcType().TYPE_CODE;
if (typeCode == Types.SMALLINT) {
// 自定义类型转换
return DbColumnType.INTEGER;
}
return typeRegistry.getColumnType(metaInfo);
})
.build();
private static final GlobalConfig GLOBAL_CONFIG = new GlobalConfig.Builder()
//禁止打开输出目录 默认值:true
.disableOpenDir()
//指定输出目录
.outputDir(System.getProperty("user.dir") + "/src/main/java")
//设置作者
.author(AUTHOR)
//开启swagger模式
.enableSwagger()
//时间策略 DateType.ONLY_DATE 默认值: DateType.TIME_PACK
//.dateType(DateType.TIME_PACK)
//注释日期 默认值: yyyy-MM-dd
//.commentDate("yyyy-MM-dd HH:mm:ss")
.build();
private static final PackageConfig PACKAGE_CONFIG = new PackageConfig.Builder()
//设置父包名
.parent(PKG_PARENT)
//父包模块名 默认值:无
//.moduleName("demo")
.entity(PKG_ENTITY)
//Mapper包名 默认值:mapper
.mapper(PKG_MAPPER)
//设置mapperXml生成路径
.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper"))
.build();
private static final StrategyConfig STRATEGY_CONFIG = new StrategyConfig.Builder()
// 设置需要生成的表名
.addInclude(TABLES)
// 设置过滤表前缀
//.addTablePrefix("t_")
//controller配置
.controllerBuilder()
//覆盖已生成文件
.enableFileOverride()
//开启生成@RestController 控制器 默认值:false
.enableRestStyle()
//service配置
.serviceBuilder()
//覆盖已生成文件
.enableFileOverride()
.convertServiceFileName((entityName) -> entityName + "Service")
.convertServiceImplFileName((entityName) -> entityName + "ServiceImpl")
//mapper配置
.mapperBuilder()
//覆盖已生成文件
.enableFileOverride()
//启用 BaseResultMap 生成 默认值:false
.enableBaseResultMap()
//启用 BaseColumnList 默认值:false
.enableBaseColumnList()
//转换 mapper 类文件名称 默认值:%sMapper
//.convertMapperFileName((entityName) -> entityName + "Mapper")
//转换 xml 文件名称 默认值:%sMapper
//.convertXmlFileName((entityName) -> entityName + "Mapper")
//entity配置
.entityBuilder()
//覆盖已生成文件
.enableFileOverride()
//禁用生成 serialVersionUID 默认值:true
.disableSerialVersionUID()
//开启lombok模型 默认值:false
.enableLombok()
//开启Boolean类型字段移除is前缀 默认值:false mysql 数据库字段类型为tinyint(1)时,会自动转换为Boolean类型
.enableRemoveIsPrefix()
//乐观锁字段名(数据库字段) versionColumnName与versionPropertyName二选一即可
.versionColumnName("version")
//逻辑删除字段名(数据库字段) logicDeleteColumnName与logicDeletePropertyName二选一即可
.logicDeleteColumnName("delete_flag")
//转换文件名称
//.convertFileName((entityName) -> entityName + "PO")
//格式化文件名称
//.formatFileName("%sPO")
//全局主键类型
.idType(IdType.ASSIGN_ID)
.addTableFills(Arrays.asList(
new Column("create_time", FieldFill.INSERT),
new Column("created_by", FieldFill.INSERT),
new Column("update_time", FieldFill.INSERT_UPDATE),
new Column("updated_by", FieldFill.INSERT_UPDATE)
))
.build();
@Test
public void execute() {
AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
generator.global(GLOBAL_CONFIG);
generator.packageInfo(PACKAGE_CONFIG);
generator.strategy(STRATEGY_CONFIG);
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
generator.execute(new FreemarkerTemplateEngine());
}
}
- tag对应的代码中为
idType(IdType.AUTO),后续修改为idType(IdType.ASSIGN_ID),直接使用默认的雪花算法生成id,若拉取tag代码,记得修改一下idType。
四、功能测试
运行com.example.demo.config.MybatisPlusGenerator#execute
查看日志:
16:01:43.464 [main] DEBUG com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine - 模板:/templates/entity.java.ftl; 文件:E:\demo\src\main\java\com\example\demo\model\SystemLog.java
16:01:43.470 [main] DEBUG com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine - 模板:/templates/mapper.java.ftl; 文件:E:\demo\src\main\java\com\example\demo\dao\SystemLogMapper.java
16:01:43.480 [main] DEBUG com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine - 模板:/templates/mapper.xml.ftl; 文件:E:\demo\src\main\resources\mapper\SystemLogMapper.xml
16:01:43.488 [main] DEBUG com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine - 模板:/templates/service.java.ftl; 文件:E:\demo\src\main\java\com\example\demo\service\SystemLogService.java
16:01:43.495 [main] DEBUG com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine - 模板:/templates/serviceImpl.java.ftl; 文件:E:\demo\src\main\java\com\example\demo\service\impl\SystemLogServiceImpl.java
16:01:43.541 [main] DEBUG com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine - 模板:/templates/controller.java.ftl; 文件:E:\demo\src\main\java\com\example\demo\controller\SystemLogController.java
16:01:43.541 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================文件生成完成!!!==========================
Process finished with exit code 0
创建成功
五、项目地址
PS:可以通过tag下载本文对应的代码版本
六、结尾
mybaits plus generator集成已完成,有问题可以联系chenzhenlindx@qq.com