版本:MySQL 8.0.27,Springboot 2.6.13,mybatis-plus-generator 3.5。
设置代码生成时设置gmt_create与gmt_modified自动填充,设置is_deleted自动生成deleted,自动实现逻辑删除等等。
一,pom导入依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
二,编写生成类
在test文件夹下写生成类(随便地方都可以的)
package com.generator;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.Collections;
public class CodeGenerator {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://192.168.231.136:3306/tystudy?characterEncoding=UTF-8&useUnicode=true&useSSL=false",
"root", "123456")
// 全局配置
.globalConfig(builder -> {
builder.author("TY") // 设置作者
.commentDate("yyyy-MM-dd hh:mm:ss") //注释日期
.outputDir(System.getProperty("user.dir") + "/user/src/main/java") // 指定输出目录
.disableOpenDir() //禁止打开输出目录,默认打开
;
})
// 包配置
.packageConfig(builder -> {
builder.parent("com.ty") // 设置父包名
.pathInfo(Collections.singletonMap(OutputFile.xml,
// 设置为当前工作目录下的/user文件夹下的路径
System.getProperty("user.dir") + "/user/src/main/resources/mappers"));
})
// 策略配置
.strategyConfig(builder -> {
builder.addInclude("user") // 设置需要生成的表名
// .addTablePrefix("t_") // 设置过滤表前缀
// Entity 策略配置
.entityBuilder()
// (重要)主键模式,这里设置自动模式,配合mysql的自增主键
.idType(IdType.AUTO)
.enableLombok() //开启 Lombok
.enableFileOverride() // 覆盖已生成文件
.naming(NamingStrategy.underline_to_camel) //数据库表映射到实体的命名策略:下划线转驼峰命
.columnNaming(NamingStrategy.underline_to_camel) //数据库表字段映射到实体的命名策略:下划线转驼峰命
.enableRemoveIsPrefix() //开启Boolean类型字段移除is前缀
.addTableFills(new Column("is_deleted", FieldFill.INSERT))//设置创建时自动填充
.addTableFills(new Column("gmt_create", FieldFill.INSERT))//设置创建时自动填充
.addTableFills(new Column("gmt_modified", FieldFill.INSERT_UPDATE))//设置创建时自动填充
.logicDeleteColumnName("is_deleted") // 逻辑删除数据库字段名
// Mapper 策略配置
.mapperBuilder()
.enableFileOverride() // 覆盖已生成文件
// Service 策略配置
.serviceBuilder()
.enableFileOverride() // 覆盖已生成文件
.formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService
.formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl
// Controller 策略配置
.controllerBuilder()
.enableFileOverride() // 覆盖已生成文件
;
})
.execute();
}
}
三,配置yaml文件
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted # 全局逻辑删除的实体字段名
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
四,配置自动填充类
@Component
public class AutoFillMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// 创建时间,取当前时间,也可以自定义 fieldName是类字段名
this.strictInsertFill(metaObject, "gmtCreate", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "gmtModified", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "deleted", Boolean.class, false);
}
@Override
public void updateFill(MetaObject metaObject) {
// 更新时间,取当前时间,也可以自定义
this.strictUpdateFill(metaObject, "gmtModified", LocalDateTime.class, LocalDateTime.now());
}
}