丢失更新问题

两个用户同时操作同一条数据,最后提交的数据会覆盖上一次提交的,这就是丢失更新问题
解决这个问题,有悲观锁(串行)与乐观锁等方法

乐观锁

乐观锁实现线程安全的数据更新,每次更新数据先比较版本号,版本号相同才可以操作,操作完成版本号+1
乐观锁实现方式:

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

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

乐观锁实现步骤

  • 在数据库中添加version字段
  • 在实体类中添加version属性,并加上注解@Version
  • 在配置类中配置乐观锁插件

(1)实体类添加属性

    //添加版本号实现乐观锁@Version@TableField(fill = FieldFill.INSERT)private Integer version;

(2)自动填充设置默认值

@Component
public class MyObjectHandler implements MetaObjectHandler {//MP添加时执行@Overridepublic void insertFill(MetaObject metaObject) {......//设置version默认值为1this.setFieldValByName("version",1,metaObject);}
}

(3)乐观锁插件

@Configuration
public class MyBatisPlusConfig {//乐观锁拦截器@Beanpublic OptimisticLockerInterceptor optimisticLockerInterceptor() {return new OptimisticLockerInterceptor();}
}

(4)测试

@Testvoid insertTest(){User user = new User();user.setName("乐观锁测试");user.setAge(20);user.setEmail("123@qq.com");userMapper.insert(user);}

@Testvoid OptimisticLockerTest(){User user = userMapper.selectById(1517029650881130501L);user.setAge(80);userMapper.updateById(user);}

MybatisPlus乐观锁配置相关推荐

  1. mybatis-plus乐观锁配置

    1.定义:定义一个版本号字段version,每次执行修改数据时先取出版本号暂存(旧值),然后执行业务逻辑,在更新时判断此时的版本号是否和一样,一样则更新成功. 2.定义实体类 @Data public ...

  2. Mybatis-Plus实现乐观锁配置

    乐观锁 主要解决 丢失更新问题 12306抢票问题 多人抢票 只有一人可以得到 第一步 数据库表中添加 version字段 第二步 在User实体类中添加属性并且加上@Version注解 @Versi ...

  3. mybatisplus 结果_springboot整合mybatisPlus 乐观锁的实现

    1:乐观锁 1.1:乐观锁简介 乐观锁:总是假设最好的情况,在读取数据的使用不会发生并发问题,但在更新的时候比较原数据是否被其他线程发生了改变.主要通过通过版本号机制或CAS算法实现,适用于读多写少的 ...

  4. MyBatis-Plus 乐观锁 防止超卖、逻辑删除、自动填充、Id自增

    MyBatis-Plus 乐观锁 防止超卖.逻辑删除.自动填充 Day3 前面的简单的讲了一下mybatis-plus的使用 当然有很多不足 我写博客就是想促进大家一起学习 也想让这些内容更简单一些. ...

  5. mybatisplus乐观锁最新

    旧版本的乐观锁配置插件如下: @Configuration @MapperScan("com.zcy.mybatisplus.mapper") @EnableTransaction ...

  6. [MyBatisPlus]乐观锁和悲观锁

    乐观锁和悲观锁 场景 一件商品,成本价是80元,售价是100元.老板先是通知小李,说你去把商品价格增加50元.小李正在玩游戏,耽搁了一个小时.正好一个小时后,老板觉得商品价格增加到150元,价格太高, ...

  7. mybatis-plus乐观锁

    乐观锁就是解决更新丢失的情况,乐观锁的主要思想就是双方同时更新并且提交事务的时候,比如张三提交事务后,然后李四再提交事务,李四提交的最终数据会覆盖张三提交的数据. 解决以上问题的办法就是加乐观锁和死锁 ...

  8. mybatis-plus乐观锁重试机制配置重置次数

    1.项目结构 2.定义异常类 2.1 ApiResultEnum类 package com.example.springbootmybatisplus.common;public enum ApiRe ...

  9. springboot 使用mybatis-plus 配置乐观锁。

    -----------------------------官方文档已更新,详细配置请访问:mybatis plus乐观锁插件 进行查看--------------------------------- ...

最新文章

  1. 判别两棵树是否相等 设计算法_从匈牙利算法到KM算法
  2. Hibernate中启用日志
  3. VS2013常用快捷键设置
  4. 太扎心!10亿网民:4成初中学历,月收入超5000元不足3成
  5. 数据结构上机实验:单链表操作
  6. 【Webcam设计】客户机与程序之间的通信cv::imencode/imdecode与 std::ifstream file与imread/imwrite方式
  7. 计算机/程序员常用英语(持续添加,包括一些简写)
  8. java字节码查看器_jclasslib 64位
  9. 使用百度 EasyDL 实现电动车进电梯自动预警
  10. 【FPGA】:ip核----ram based shift register
  11. 详解 Win8 KMS 激活原理_-Chaz-_新浪博客
  12. 黄一老师讲述贷款“黑名单”小心别上了黑名单!
  13. 微信公众号微信支付提示 调用支付JSAPI缺少参数:appId
  14. 怎么修改我的世界服务器封面,《我的世界:初识服务器》
  15. 618啦,你的钱包又被盯上啦!
  16. 安卓多渠道打包(三)360加固多渠道打包
  17. ICAP互换客户端地址协议iOS实现示例
  18. 【python】BeautifulSoup的应用
  19. [Django1.5] two-scoops-django-best-practices 读书笔记
  20. 卷毛-网络编程基础(一)网络协议

热门文章

  1. 双通道5.2GSPS(或单通道10.4GSPS)射频采样FMC+模块
  2. 2014华中首届手游创意大赛
  3. 一文看懂智慧城市,解码25万亿大市场的机遇与格局
  4. 获取当前登录用户的用户名
  5. 在 Debian 11 Bullseye 上安装 Proxmox VE 7国内镜像源
  6. STM32G0系列的启动配置与程序下载说明
  7. 现在流行的网络直播都需要什么设备?
  8. Spherical harmonics 和 cubemap 的关系
  9. 惠州市城市职业学院计算机考点,2020广东乡镇惠州考区笔试考点地理位置及考场安排表...
  10. 十进制与R进制之间的转换