MybatisPlus乐观锁配置
丢失更新问题
两个用户同时操作同一条数据,最后提交的数据会覆盖上一次提交的,这就是丢失更新问题
解决这个问题,有悲观锁(串行)与乐观锁等方法
乐观锁
乐观锁实现线程安全的数据更新,每次更新数据先比较版本号,版本号相同才可以操作,操作完成版本号+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乐观锁配置相关推荐
- mybatis-plus乐观锁配置
1.定义:定义一个版本号字段version,每次执行修改数据时先取出版本号暂存(旧值),然后执行业务逻辑,在更新时判断此时的版本号是否和一样,一样则更新成功. 2.定义实体类 @Data public ...
- Mybatis-Plus实现乐观锁配置
乐观锁 主要解决 丢失更新问题 12306抢票问题 多人抢票 只有一人可以得到 第一步 数据库表中添加 version字段 第二步 在User实体类中添加属性并且加上@Version注解 @Versi ...
- mybatisplus 结果_springboot整合mybatisPlus 乐观锁的实现
1:乐观锁 1.1:乐观锁简介 乐观锁:总是假设最好的情况,在读取数据的使用不会发生并发问题,但在更新的时候比较原数据是否被其他线程发生了改变.主要通过通过版本号机制或CAS算法实现,适用于读多写少的 ...
- MyBatis-Plus 乐观锁 防止超卖、逻辑删除、自动填充、Id自增
MyBatis-Plus 乐观锁 防止超卖.逻辑删除.自动填充 Day3 前面的简单的讲了一下mybatis-plus的使用 当然有很多不足 我写博客就是想促进大家一起学习 也想让这些内容更简单一些. ...
- mybatisplus乐观锁最新
旧版本的乐观锁配置插件如下: @Configuration @MapperScan("com.zcy.mybatisplus.mapper") @EnableTransaction ...
- [MyBatisPlus]乐观锁和悲观锁
乐观锁和悲观锁 场景 一件商品,成本价是80元,售价是100元.老板先是通知小李,说你去把商品价格增加50元.小李正在玩游戏,耽搁了一个小时.正好一个小时后,老板觉得商品价格增加到150元,价格太高, ...
- mybatis-plus乐观锁
乐观锁就是解决更新丢失的情况,乐观锁的主要思想就是双方同时更新并且提交事务的时候,比如张三提交事务后,然后李四再提交事务,李四提交的最终数据会覆盖张三提交的数据. 解决以上问题的办法就是加乐观锁和死锁 ...
- mybatis-plus乐观锁重试机制配置重置次数
1.项目结构 2.定义异常类 2.1 ApiResultEnum类 package com.example.springbootmybatisplus.common;public enum ApiRe ...
- springboot 使用mybatis-plus 配置乐观锁。
-----------------------------官方文档已更新,详细配置请访问:mybatis plus乐观锁插件 进行查看--------------------------------- ...
最新文章
- 判别两棵树是否相等 设计算法_从匈牙利算法到KM算法
- Hibernate中启用日志
- VS2013常用快捷键设置
- 太扎心!10亿网民:4成初中学历,月收入超5000元不足3成
- 数据结构上机实验:单链表操作
- 【Webcam设计】客户机与程序之间的通信cv::imencode/imdecode与 std::ifstream file与imread/imwrite方式
- 计算机/程序员常用英语(持续添加,包括一些简写)
- java字节码查看器_jclasslib 64位
- 使用百度 EasyDL 实现电动车进电梯自动预警
- 【FPGA】:ip核----ram based shift register
- 详解 Win8 KMS 激活原理_-Chaz-_新浪博客
- 黄一老师讲述贷款“黑名单”小心别上了黑名单!
- 微信公众号微信支付提示 调用支付JSAPI缺少参数:appId
- 怎么修改我的世界服务器封面,《我的世界:初识服务器》
- 618啦,你的钱包又被盯上啦!
- 安卓多渠道打包(三)360加固多渠道打包
- ICAP互换客户端地址协议iOS实现示例
- 【python】BeautifulSoup的应用
- [Django1.5] two-scoops-django-best-practices 读书笔记
- 卷毛-网络编程基础(一)网络协议
热门文章
- 双通道5.2GSPS(或单通道10.4GSPS)射频采样FMC+模块
- 2014华中首届手游创意大赛
- 一文看懂智慧城市,解码25万亿大市场的机遇与格局
- 获取当前登录用户的用户名
- 在 Debian 11 Bullseye 上安装 Proxmox VE 7国内镜像源
- STM32G0系列的启动配置与程序下载说明
- 现在流行的网络直播都需要什么设备?
- Spherical harmonics 和 cubemap 的关系
- 惠州市城市职业学院计算机考点,2020广东乡镇惠州考区笔试考点地理位置及考场安排表...
- 十进制与R进制之间的转换