MyBatis-Plus的乐观锁插件(Springboot版)

当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:

  • 取出记录时,获取当前 version
  • 更新时,带上这个 version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果 version 不对,就更新失败

 官方地址------>  乐观锁插件 | MyBatis-Plus

1.数据库增加version字段,并设置个默认值。实体类增加属性+@Version 注解

MyBatis-Plus的乐观锁插件(Springboot版)_第1张图片 MyBatis-Plus的乐观锁插件(Springboot版)_第2张图片

说明:

  • 支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime
  • 整数类型下 newVersion = oldVersion + 1
  • newVersion 会回写到 entity 中
  • 仅支持 updateById(id) 与 update(entity, wrapper) 方法
  • 在 update(entity, wrapper) 方法下, wrapper 不能复用!!!

2.在MybatisPlus配置类中 注册乐观锁拦截器 

 MyBatis-Plus的乐观锁插件(Springboot版)_第3张图片

package com.dfrz.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
    public class  MyBatisPlusConfig {

        //注册拦截器
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor(){
            MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
            //添加乐观锁拦截器
            mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
            //添加分页拦截器
            mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
            return mybatisPlusInterceptor;
        }

    }

 3.测试乐观锁

 MyBatis-Plus的乐观锁插件(Springboot版)_第4张图片

你可能感兴趣的:(mybatis)