mybatis-plus-扩展使用
1.开启日志功能,在yml配置文件添加配置
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2.主键生成策略, 在主键ID上添加注解即可,关于id生成的一些策略:https://www.cnblogs.com/haoxinyue/p/5208136.html
// 默认 ID_WORKER
@TableId(type = IdType.ID_WORKER_STR)
private Long id;
public enum IdType {
// 自增
AUTO(0),
NONE(1),
// 手动输入
INPUT(2),
// 唯一id生成器
ID_WORKER(3),
// uuid
UUID(4),
// 唯一id生成器(字符串类型)
ID_WORKER_STR(5); }
3.更新策略,数据添加两个时间字段,create_time、update_time 添加时间、修改时间,添加时间字段、注解,编写注解的处理器
// 时间的操作(自动更新)
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
// MetaObjectHandler 元对象处理
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
// 插入的策略
@Override
public void insertFill(MetaObject metaObject) {
// this.setFieldValByName()设置当前字段的值!
// String fieldName, Object fieldVal, MetaObject metaObject
// 以后只要是插入操作就会自动控制
// createTime updateTime 使用 new Date() 进行填充
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
// 更新策略
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
4.乐观锁,数据库添加version字段(int)version,添加version注解到字段上面,添加 乐观锁插件即可,就自动带上了版本号
@Version
private Integer version;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
public class MPconfig {
// 注入人家写好的插件处理器
// 本质是一个拦截器 Interceptor
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
5.分页查询
在上面的 MPconfig 添加插件
// 分页插件
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
6.逻辑删除Delete,数据添加字段(int)deleted,实体类添加字段及注解
在上面的 MPconfig 添加插件
@TableLogic // 逻辑删除字段!
private Integer deleted;
// 逻辑删除插件!
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
7.性能分析
在上面的 MPconfig 添加插件
// SQL执行效率插件
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
// 允许执行的sql的最长时间 , 默认的单位是ms
performanceInterceptor.setMaxTime(1000);
performanceInterceptor.setFormat(true); // 格式化SQL代码
return performanceInterceptor;
}
最后完整的插件配置类
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
public class MPconfig {
// 注入人家写好的插件处理器
// 本质是一个拦截器 Interceptor
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
// 分页插件
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
// 逻辑删除插件!
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
// SQL执行效率插件
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
// 允许执行的sql的最长时间 , 默认的单位是ms
performanceInterceptor.setMaxTime(1000);
performanceInterceptor.setFormat(true); // 格式化SQL代码
return performanceInterceptor;
}
}

浙公网安备 33010602011771号