mybatis-plus-扩展使用

1.开启日志功能,在yml配置文件添加配置
1
2
3
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

  

2.主键生成策略, 在主键ID上添加注解即可,关于id生成的一些策略:https://www.cnblogs.com/haoxinyue/p/5208136.html

1
2
3
// 默认 ID_WORKER
 @TableId(type = IdType.ID_WORKER_STR)
 private Long id;

  

1
public enum IdType { <br>  // 自增<br>   AUTO(0),<br>   NONE(1), <br>  // 手动输入 <br>  INPUT(2), <br>  // 唯一id生成器 <br>  ID_WORKER(3),<br>  // uuid <br>  UUID(4), <br>  // 唯一id生成器(字符串类型) <br>  ID_WORKER_STR(5); }

  

3.更新策略,数据添加两个时间字段,create_time、update_time 添加时间、修改时间,添加时间字段、注解,编写注解的处理器

1
2
3
4
5
// 时间的操作(自动更新)
  @TableField(fill = FieldFill.INSERT)
  private Date createTime;
  @TableField(fill = FieldFill.INSERT_UPDATE)
  private Date updateTime;

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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注解到字段上面,添加 乐观锁插件即可,就自动带上了版本号

1
2
@Version
  private Integer version;

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 添加插件

1
2
3
4
5
// 分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

  

 

6.逻辑删除Delete,数据添加字段(int)deleted,实体类添加字段及注解

在上面的 MPconfig 添加插件

1
2
@TableLogic // 逻辑删除字段!
  private Integer deleted;

  

1
2
3
4
5
// 逻辑删除插件!
   @Bean
   public ISqlInjector sqlInjector() {
       return new LogicSqlInjector();
   }

  

7.性能分析

在上面的 MPconfig 添加插件

1
2
3
4
5
6
7
8
9
10
// 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;
   }

  

最后完整的插件配置类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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;
    }
 
}

  

posted @   紫枫夜羽  阅读(204)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示