mybatis-plus 使用乐观锁修改
title
- 乐观锁与悲观锁
- 解决方案
- code
- 测试
乐观锁与悲观锁
乐观锁:十分乐观,总是认为不会出现问题,无论干什么,都不会去上锁。如果出现了问题,就再次更新值测试。
悲观锁:十分悲观,认为总是出现问题,无论干什么,都去上锁。再去操作。
当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
-- 多线程下 锁的处理
-- 乐观锁: 1. 先查询,获取版本号 version = 1
-- A 线程
update user set name = 'jack', version = version + 1
where id = 1 and version = 1-- B 线程抢先完成,这个时候 更新version为 2,会导致A 修改失败
update user set name = 'jack', version = version + 1
where id = 1 and version = 1
解决方案
在表中加上version字段,int类型,默认值0
就目前最新版本的插件是3.4.1 ,需要将插件添加到拦截器中。不是注入bean。
新版:OptimisticLockerInnerInterceptor 在3.4.1 中块过时的: OptimisticLockerInterceptor
- 在version字段上添加@Version 解决。
code
package cn.bitqian.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;/*** mybatis plus配置类* @author echo lovely* @date 2020/11/15 09:48*/@EnableTransactionManagement // 开启事务
@MapperScan("cn.bitqian.mapper")
@Configuration
public class MyBatisPlusConfig {// mybatis插件注册@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {// 乐观锁MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();// 添加乐观锁到插件中mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return mybatisPlusInterceptor;}}
字段需要添加
测试
@Testvoid testOptimisticLocker1() {User user = userMapper.selectById(1327447426226786310L);// 抢先修改User user1 = userMapper.selectById(1327447426226786310L);user1.setName("jjj");userMapper.updateById(user1);// 不会被修改,因为由于上面的修改version变了user.setName("bitqian666");userMapper.updateById(user);}
mybatis-plus 使用乐观锁修改相关推荐
- 配置MyBatis Plus 的乐观锁功能
配置MyBatis Plus 的乐观锁功能 一. 回顾CAS乐观锁 CAS: 二. 配置MyBatis Plus 的乐观锁 (1)数据库:添加version版本号 (2)实体类:添加version版本 ...
- MybatisPlus实现乐观锁
乐观锁 主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新 乐观锁实现方式: 取出记录时,获取当前version 更新时,带上这个version 执行更新 ...
- MybatisPlus中乐观锁的配置
1.什么是乐观锁? 乐观锁:十分乐观,它总是认为不会出现问题,无论干什么,都不去上锁!如果出现了问题,就重新更新值. 2.什么是悲观锁? 悲观锁:十分悲观,它总是认为会出现问题,无论干什么,都加上锁, ...
- [MyBatisPlus]乐观锁和悲观锁
乐观锁和悲观锁 场景 一件商品,成本价是80元,售价是100元.老板先是通知小李,说你去把商品价格增加50元.小李正在玩游戏,耽搁了一个小时.正好一个小时后,老板觉得商品价格增加到150元,价格太高, ...
- mybatis mysql 乐观锁_基于tx.mapper实现的mysql乐观锁
1.表CREATE TABLE `demo` ( `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '物理主键', `demo_id` varchar(3 ...
- mybatis 乐观锁_MybatisPlus新特性之逻辑删除、乐观锁、自动填充
MP特性 公共字段的自动填充功能 自动更新全局属性,比如创建的时间修改的时间,这样就不用每执行一次插入更新操作都带上一个set大大节省了很多效率,从而也避免为了因为时间格式的不统一问题. 为了输出日志 ...
- mybatis 乐观锁和逻辑删除
本篇介绍easymybatis如配置乐观锁和逻辑删除. 乐观锁 easymybatis提供的乐观锁使用方式跟JPA一样,使用@Version注解来实现.即:数据库增加一个int或long类型字段ver ...
- 共享锁、排他锁、互斥锁、悲观锁、乐观锁、行锁、表锁、页面锁、不可重复读、丢失修改、读脏数据...
作者:T-Birds blog.csdn.net/weixin_36634753/article/details/90815755 共享锁(S锁): 又称为读锁,可以查看但无法修改和删除的一种数据锁. ...
- Elasticsearch 并发修改乐观锁
2019独角兽企业重金招聘Python工程师标准>>> Elasticsearch 并发修改乐观锁 博客分类: 搜索引擎,爬虫 来自: http://blog.csdn.net//j ...
最新文章
- 5单个编译总会编译全部_玩转Android10(五)源码编译开发中常用命令
- 近期北京动点软件发现XXX公司盗用我公司WPF项目案例
- 从近年CVPR看域自适应立体匹配
- Boost:parallel grep测试程序
- Oracle10g在linux下安装详解
- 轻松监控Docker容器中的ADF应用程序
- Spring 下注解说明
- Ubuntu16.04安装matlab 2015b教程(含下载和激活文件)
- 全国省、市、县(区)编码表
- 我国支付结算体系概况
- java 压缩文件夹有几率压缩失败,打开显示不可预料的末端且用其他专业软件解压文件没压缩完全
- walking与Matlab入门教程-连接到walking机器人
- cad工具箱详细讲解_CAD的工具说明及使用讲解
- 斯坦福大学开源四足机器人pupper腿部组装(上)
- python应用——分治法实现循环赛
- 每日一言:站在高山之巅的人
- iqoo手机可以刷鸿蒙系统吗,华为老机型可以更新鸿蒙系统么-华为哪些老机型支持鸿蒙系统...
- 软考高级软件架构师学习笔记一(软件架构设计)
- bert如何应用于下游任务_培训特定于法律域的BERT
- CSC7715 同步整流
热门文章
- 前端学习(1704):前端系列javascript之问题解答2和总结
- mybatis学习(3):映射文件的配置和接口创建
- 数字图像处理技术的应 用领域
- html:(26):类选择器和id选择器
- 高压断路器故障诊断的相关方法
- 深度学习--Matlab使用LSTM长短期记忆网络对负荷进行分类
- 连续赋值与求值顺序var a = {n:1};a.x = a = {n:2}; alert(a.x);
- Hessian之简单使用
- GO语言-基础语法:条件判断
- [JSOI 2015] 子集选取