依赖
<!-- SpringBoot 中使用mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<!-- mybatis-plus 代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<!--velocity 模板-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
编写代码生成器类
package com.example.demo1.utils;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Collections;
/**
* 代码自动生成器
* @author zpc
* @version 1.0
* @date 2021/11/7 13:59
*/
public class AutoGenerator {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://localhost/demo?useUnicode=true&characterEncoding=utf8", "root", "root")
// 全局配置
.globalConfig(builder -> {
builder.author("zpc") // 设置作者
// .enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir(System.getProperty("user.dir") + "/src/main/java"); // 指定输出目录
// .commentDate("yyyy-MM-dd"); //调整时间格式
})
// 包配置
.packageConfig(builder -> {
builder.parent("com.example.demo1") // 设置父包名
.moduleName("system") // 设置父包模块名
// .entity("entity")
// .service("service")
// .serviceImpl("serviceImpl")
// .controller("controller")
// .mapper("mapper")
// .xml("mapper")
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir")+"/src/main/resources/mapper")); // 设置mapperXml生成路径
})
// 策略配置
.strategyConfig(builder -> {
builder.addInclude("test1") // 设置需要生成的表名
.addTablePrefix("t_", "c_") // 设置过滤表前缀
.serviceBuilder() // service 配置策略
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl")
.entityBuilder()
.enableLombok() // 开启Lombok
.logicDeleteColumnName("deleted") // 说明逻辑删除(软删除)是哪个字段
.enableTableFieldAnnotation() // 属性上加说明注解
.controllerBuilder() // controller 策略配置
.formatFileName("%sController")
.enableRestStyle() // 开启 RestController
.mapperBuilder() //mapper 策略配置
.superClass(BaseMapper.class) // 继承哪个父类
.formatMapperFileName("%sMapper")
.enableMapperAnnotation() // @mapper 开启
.formatXmlFileName("%sMapper"); // xml 名
})
// // 使用Freemarker引擎模板,默认的是Velocity引擎模板
// .templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}
yml
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost/demo?useUnicode=true&characterEncoding=utf8
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
# 配置日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 配置逻辑删除(软删除)
global-config:
db-config:
logic-delete-value: 1 # 已删除的标记
logic-not-delete-value: 0 # 未删除的标记
mp 配置
@MapperScan("com.example.demo1.mapper") // 扫描 mapper 文件
@EnableTransactionManagement // 自动管理事务
@Configuration // 配置类注解
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
//乐观锁
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
//分页配置
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mybatisPlusInterceptor;
}
}
填充策略配置
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
// 插入时的填充策略
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill....");
// setFieldValByName 的三个参数分别是 字段名,字段值,metaObject
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
// 更新时的填充策略
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill....");
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}