MybatisPlus实现乐观锁
乐观锁
主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新
乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
(1)数据库中添加version字段
ALTER TABLE `user` ADD COLUMN `version` INT
@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;
(3)元对象处理器接口添加version的insert默认值
@Override
public void insertFill(MetaObject metaObject) {......this.setFieldValByName("version", 1, metaObject);
}
特别说明:
- 支持的数据类型只有 int,Integer,long,Long,Date,Timestamp,LocalDateTime
- 整数类型下
newVersion = oldVersion + 1
newVersion
会回写到entity
中- 仅支持
updateById(id)
与update(entity, wrapper)
方法 - 在
update(entity, wrapper)
方法下,wrapper
不能复用!!!
package com.leon.mpdemo1010.config;import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;@Configuration
@MapperScan("com.leon.mpdemo1010.mapper")
public class MpConfig {//乐观锁插件@Beanpublic OptimisticLockerInterceptor optimisticLockerInterceptor() {return new OptimisticLockerInterceptor();}}
(5)测试乐观锁可以修改成功
测试后分析打印的sql语句,将version的数值进行了加1操作
//测试乐观锁
@Test
public void testOptimisticLocker() {//根据id查询数据User user = userMapper.selectById(1231115382920916994L);//进行修改user.setAge(200);userMapper.updateById(user);
}
(5)测试乐观锁修改失败
/*** 测试乐观锁插件 失败*/
@Test
public void testOptimisticLockerFail() {//查询User user = userMapper.selectById(1L);//修改数据user.setName("Helen Yao1");user.setEmail("helen@qq.com1");//模拟取出数据后,数据库中version实际数据比取出的值大,即已被其它线程修改并更新了versionuser.setVersion(user.getVersion() - 1);//执行更新userMapper.updateById(user);}
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 使用乐观锁修改
title 乐观锁与悲观锁 解决方案 code 测试 乐观锁与悲观锁 乐观锁:十分乐观,总是认为不会出现问题,无论干什么,都不会去上锁.如果出现了问题,就再次更新值测试. 悲观锁:十分悲观,认为总是出 ...
- springboot 使用mybatis-plus 配置乐观锁
新增 Mybatis plus乐观锁插件 配置类 package com.engine.cmdbsync.config;import com.baomidou.mybatisplus.extensio ...
- springboot 使用mybatis-plus 配置乐观锁。
-----------------------------官方文档已更新,详细配置请访问:mybatis plus乐观锁插件 进行查看--------------------------------- ...
- Mybatis-Plus实现乐观锁配置
乐观锁 主要解决 丢失更新问题 12306抢票问题 多人抢票 只有一人可以得到 第一步 数据库表中添加 version字段 第二步 在User实体类中添加属性并且加上@Version注解 @Versi ...
- mybatis-plus使用乐观锁插件
参考博文 https://baijiahao.baidu.com/s?id=1659469738216922362&wfr=spider&for=pc 1 没有锁的风险 开发不设锁,就 ...
- MybatisPlus中乐观锁的配置
1.什么是乐观锁? 乐观锁:十分乐观,它总是认为不会出现问题,无论干什么,都不去上锁!如果出现了问题,就重新更新值. 2.什么是悲观锁? 悲观锁:十分悲观,它总是认为会出现问题,无论干什么,都加上锁, ...
最新文章
- 装饰器的定义、语法糖用法及示例代码
- python3 进度条_详细介绍Python进度条tqdm的使用
- [python]_ELVE_pip2和pip3如何共存
- 工业以太网交换机的冗余功能及发展历程介绍
- 暴露的全局方法_史上最便捷搭建 ZooKeeper 服务器的方法
- python sklearn svm 权重_sklearn svm基本使用
- 【转载】spring mvc 使用session
- 基于二进制粒子群算法的配电网故障诊断- 附代码
- linux下查看进程与线程
- 大学计算机第一学期期末考试试题,《大学计算机基础》期末考试试题(A卷)..doc...
- 【行业应用】阿里云实时计算 Flink 版 IoT 行业解决方案
- win10计算机管理 分区,win10系统自带磁盘管理工具调整硬盘分区大小的详细方案...
- 深入浅出ASP .NET Core学习记录
- 多块英伟达K80显卡linux安装,ubuntu14.04下NVIDIA Tesla K80 、GTX1080顯卡驅動以及Tensorflow、Python的安裝教程...
- 网络爬虫——原理简介
- 异步爬取有道词典(入门js逆向)
- opencv与openmv?
- python中噪音是什么意思_Perlin噪声和Python的ctypes
- 去角质剂和磨砂膏行业调研报告 - 市场现状分析与发展前景预测
- ABCD四个人说真话的概率都是1/3。假如A声称B否认C说D是说谎了,那么D说过的那句话真话的概率是多少