5.MyBatis Plus乐观锁插件

5.MyBatis Plus乐观锁插件

​ 乐观锁意图

  • 当要更新一条记录的时候,希望这条记录没有被别人更新

​ 乐观锁的实现方式

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

​ 第一步:在数据库中添加version字段

  • 设置默认值为1

在这里插入图片描述

​ 第二步:实体类添加相应的字段

  • @Version注解:表明这是一个乐观锁Version注解
@Version
private Integer version;

​ 第三步:需要注册组件(根据官网来)

  • 就是乐观锁插件需要注入OptimisticLockerInterceptor类到IOC容器中
  • @Configuration:表明这是一个配置类只有加了这个配置的bean才能生效
  • 这里加了事务支持
package com.xuan.interceptor;

import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.springframework.context.annotation.Bean;

/**
 * xuan
 * 2020/7/21
 * 1870136088@qq.com
 **/
@EnableTransactionManagement
@Configuration
public class MyInterceptor {

   	//注册乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}

​ 第四步:进行测试

  • 先测试只有一个用户需要更新 乐观锁成功案例
//测试一个任务 乐观锁成功案例
@Test
void testOptimistic() {
    //第一步:查询id为1的用户
    User user = userMapper.selectById(1l);

    //第二步:对改用户进行设置
    user.setAge(52);
    user.setName("kaikai");
    user.setEmail("zzkshierzi@163.com");

    //第三步:更新该用户信息
    int i = userMapper.updateById(user);
    System.out.println(i);
}
  • 测试结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XV9khzmm-1595380498075)(C:\Users\l\AppData\Roaming\Typora\typora-user-images\image-20200721162416230.png)]

​ 测试乐观锁失败案例

  • 代码实现
  • 可以使用自旋锁来多次尝试提交
//测试多个任务 乐观锁失败案例
@Test
void testOptimistic2() {
    //第一步:查询id为1的用户
    User user = userMapper.selectById(1l);
    //第二步:对改用户进行设置
    user.setAge(52);
    user.setName("kaikai");
    user.setEmail("zzkshierzi@163.com");

    //第三步:模拟多任务环境,另一个任务也对该用户进行操作
    //第四步:查询id为1的用户
    User user2 = userMapper.selectById(1l);
    //第五步:对改用户进行设置
    user2.setAge(52);
    user2.setName("Optimistic");
    user2.setEmail("zzkshierzi@163.com");
    //第六步:更新该用户信息
    userMapper.updateById(user2);

    //第七步:更新该用户信息
    //可以使用自旋锁来多次尝试提交
    userMapper.updateById(user);

}
  • 结果展示

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值