MybatisPlus中乐观锁的配置
1、什么是乐观锁?
乐观锁:十分乐观,它总是认为不会出现问题,无论干什么,都不去上锁!如果出现了问题,就重新更新值。
2、什么是悲观锁?
悲观锁:十分悲观,它总是认为会出现问题,无论干什么,都加上锁,再去操作。
3、Mybatis中的乐观锁
乐观锁机制需要在表结构上额外加一个字段,一般名字叫version(版本的意思)。
(1)首先,在数据库表中添加int类型的字段,名字叫version,默认值为1。
(2)然后对应的更新实体类,加上字段,并使用@Version注解:
@Version
private Integer version;
(3)再新建一个配置类,在类中注册乐观锁插件:
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {// 注册乐观锁插件@Beanpublic OptimisticLockerInterceptor optimisticLockerInnerInterceptor() {return new OptimisticLockerInterceptor();}
}
注意:别忘了加上@Configuration注解,告诉SpringBoot这是一个配置类。
(4)开始测试
更新成功的例子:
// 测试乐观锁 成功的例子
@Test
void testOptimisticLocker() {// 1、先查询出一条记录UserEntity userEntity = userMapper.selectById(16);// 2、修改该实体类信息userEntity.setAge(18);// 3、更新操作执行int count = userMapper.updateById(userEntity);System.out.println(count); // 1
}
更新失败的例子,即多个线程修改同一条记录:
@Test
void testOptimisticLocker02() {// 线程1UserEntity userEntity1 = userMapper.selectById(16);userEntity1.setAge(10);// 模拟线程2,它在线程1修改之前,已经更新了16号的信息UserEntity userEntity2 = userMapper.selectById(16);userEntity2.setAge(20);int count2 = userMapper.updateById(userEntity2);System.out.println(count2); // 1// 线程2修改完之后,线程1再去修改int count1 = userMapper.updateById(userEntity1);System.out.println(count1); // 0
}
小结:
乐观锁只针对于更新操作。
当要更新一条记录的时候,希望这条记录没有被别人更新。
乐观锁实现原理:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
按照前篇说的那张表来说,更新时的打印的日志语句为:
UPDATE tbl_user SET name=?, age=?, email=?, create_time=?, update_time=?, version=? WHERE id=? AND version=?
注意:
Version支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime
整数类型下newVersion = oldVersion + 1
newVersion会回写到entity实体类变量中。
仅支持 updateById(id) 与 update(entity, wrapper) 方法。
在update(entity, wrapper)方法下,wrapper不能复用!!!
MybatisPlus中乐观锁的配置相关推荐
- 新版的Mybatis-Plus使用乐观锁,MP_OPTLOCK_VERSION_ORIGINAL与新版插件的使用方法
新版的Mybatis-Plus使用乐观锁,MP_OPTLOCK_VERSION_ORIGINAL与新版插件的使用方法 在旧版的配置类我们一般直接注册就行了 // 注册乐观锁插件@Beanpublic ...
- MyBatisPlus的乐观锁和悲观锁
MyBatisPlus的乐观锁和悲观锁 1.乐观锁 1.1 场景 2.0 乐观锁与悲观锁 3.0 模拟修改冲突 Demo 4.0 通过乐观锁观念解决问题 文章顺序及整体目录可查看(点我即可) 1.乐观 ...
- Mybatis-Plus的乐观锁和悲观锁
乐观锁和悲观锁 如果没看懂.需要看下操作系统 模拟修改冲突 创建数据 CREATE TABLE t_product (id BIGINT(20) NOT NULL COMMENT '主键id',NAM ...
- Mybatis-Plus实现乐观锁配置
乐观锁 主要解决 丢失更新问题 12306抢票问题 多人抢票 只有一人可以得到 第一步 数据库表中添加 version字段 第二步 在User实体类中添加属性并且加上@Version注解 @Versi ...
- MybatisPlus实现乐观锁
乐观锁 主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新 乐观锁实现方式: 取出记录时,获取当前version 更新时,带上这个version 执行更新 ...
- mybatis-plus 使用乐观锁修改
title 乐观锁与悲观锁 解决方案 code 测试 乐观锁与悲观锁 乐观锁:十分乐观,总是认为不会出现问题,无论干什么,都不会去上锁.如果出现了问题,就再次更新值测试. 悲观锁:十分悲观,认为总是出 ...
- mybatis-plus使用乐观锁插件
参考博文 https://baijiahao.baidu.com/s?id=1659469738216922362&wfr=spider&for=pc 1 没有锁的风险 开发不设锁,就 ...
- java中乐观锁_Java中乐观锁与悲观锁的实现
锁(locking) 业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算 处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种, ...
- 数据库中乐观锁与悲观锁的概念
锁( locking ) 业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算 处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中 (可能是 ...
最新文章
- 基于arcgis的python脚本编程视频-面向ArcGIS的Python脚本编程 PDF 高清版
- MySQL自增字段并发插入导致死锁
- Daily scrum 10.15
- 吴恩达机器学习学习笔记第一章:绪论初识机器学习
- KNN回归python实现
- java编程需要数学知识吗_编程需要很好的数学吗?
- linux安装pdo mysql扩展_linux下php安装pdo_mysql扩展
- 接口的隐式和显式实现
- 微型linux系统裁剪
- vb.net学习笔记
- C语言最新学习路线(从入门到实战)
- 使用catagory类别给控件加边框
- JavaScript DOM 学习笔记
- 手环的PCBA部分,主要包括一颗集成BLE功能的MCU,以及由MCU控制的各种外设
- ABAP ALV DATA_CHANGED 函数使用说明 (ALV备忘二)
- 自动驾驶领域的Android?百度能否超越特斯拉和谷歌
- 关于一个web站点的欢迎页面
- 血管内冲击波:冠状动脉钙化处理的技术革新
- vue element 重新上传图片(将已经上传过的图片链接重新上传)
- 制作操作系统启动U盘