基础配置
官网:https://baomidou.com/pages/24112f/
依赖:
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- mybatis-plus-->
<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>
说明:最好不要mybatis-plus和mybatis一起导入
配置文件:
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/mybatis_plus?userSSl=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
driver-class-name: com.mysql.cj.jdbc.Driver
输出sql日志配置
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
时间类字段
创建时间与更新时间自动生成
数据库生成
将创建时间与更新时间的默认值改为CURRENT_TIMESTAMP
代码生成
在实体类字段上增加注解
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
编写处理器
@Slf4j
@Component
public class CusMetaDataHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
Date date = new Date();
this.setFieldValByName("createTime",date,metaObject);
log.info("set createTime " + date);
}
@Override
public void updateFill(MetaObject metaObject) {
Date date = new Date();
this.setFieldValByName("updateTime",date,metaObject);
log.info("set updateTime " + date);
}
}
乐观锁
1、在数据库表增加version字段
2、在实体类version字段上增加@Version注解
3、在MybatisPlus配置类中增加Bean
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
分页查询
在配置类中增加分页插件
使用分页
@Test
public void testPage(){
Page<UserTest> page = new Page<>(1,2);
Page<UserTest> userTestPage = userTestMapper.selectPage(page, null);
for (UserTest record : userTestPage.getRecords()) {
System.out.println(record);
}
}
逻辑删除
在数据表中增加delete字段
在实体类增加注解@TableLogic
在配置文件中进行配置
mybatis-plus:
global-config:
db-config:
logic-delete-field: delete # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
自动注入的sql会加上delete=0的条件,自定义sql不会加
性能分析插件
MP在3.2.0移除了PerformanceInterceptor 相关,建议使用p6spy
增加依赖
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
修改数据库连接配置
P6SpyDriver底层是实现与com.mysql.jdbc.Driver类似都是实现java.sql.Driver接口
url: jdbc:p6spy:mysql://localhost:3306/...
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
在resources下增加配置文件
spy.properties
module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
# class to use for formatting log messages (default is: com.p6spy.engine.spy.appender.SingleLineFormat)
#logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
logMessageFormat=com.ralph.commons.mybatis.logs.P6spyLogFormatStrategy
# 自带的日志格式 (default is com.p6spy.engine.spy.appender.FileLogger)
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
#appender=com.p6spy.engine.spy.appender.StdoutLogger
#appender=com.p6spy.engine.spy.appender.FileLogger
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 使用日志系统记录sql
appender=com.leimingtech.commons.mybatis.logs.P6SpyLogger
## 配置记录Log例外
excludecategories=info,debug,result,batc,resultset
# 设置使用p6spy driver来做代理
deregisterdrivers=true
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动
driverlist=com.mysql.jdbc.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 秒
outagedetectioninterval=2
如果需要自定义输出日志格式,以及输出的内容,可以自定义配置日志输出内容类,直接继承与MessageFormattingStrategy即可
条件构造器
官网:https://baomidou.com/pages/10c804/#kotlin%E4%BD%BF%E7%94%A8wrapper
示例
QueryWrapper<UserTest> userTestQueryWrapper = new QueryWrapper<>();
userTestQueryWrapper.eq("name","ralph").ge("age",20);
UserTest userTest = userTestMapper.selectOne(userTestQueryWrapper);
自动生成代码
添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
写配置类
配置参数地址:https://github.com/baomidou/generator
package com.ralph.springbootredis.config;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Property;
import java.util.Collections;
/**
* 自动生成代码
*/
public class GeneratorCode {
public static void main(String[] args) {
String codePath = "E:\\TemFile\\generator";
// 构建自动生成代码对象
FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis_plus?userSSl=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT",
"root", "123456")
.globalConfig(builder -> {
builder.author("ralph") // 设置作者
.enableSwagger() // 开启 swagger 模式
.outputDir(codePath); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.ralph") // 设置父包名
.moduleName("springbootredis") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, codePath)); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("generator_code") // 设置需要生成的表名
.addTablePrefix("t_", "c_") // 设置过滤表前缀
.entityBuilder().enableLombok() // 使用Lombok
.idType(IdType.AUTO) // 设置id策略
.addTableFills(new Property("createTime", FieldFill.INSERT),new Property("updateTime",FieldFill.UPDATE)) // 字段填充
.enableFileOverride() // 覆盖原有文件
.versionColumnName("version") // 乐观锁字段名(数据库)
.versionPropertyName("version") // 乐观锁属性名(实体)
.logicDeleteColumnName("del_flag") // 逻辑删除字段名(数据库)
.logicDeletePropertyName("delFlag"); // 逻辑删除属性名(实体)
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}
👍 欢迎前往博客主页查看更多内容
👍 如果觉得不错,期待您的点赞、收藏、评论、关注
👍 如有错误欢迎指正!