mybatis-plus自带的乐观锁

news2024/9/19 11:10:48

文章目录

    • 1.场景
      • 1.1.模拟冲突
    • 2.添加乐观锁
      • 2.1数据库添加字段
      • 2.2配置文件中增加乐观锁拦截器
      • 2.3类的属性上添加注解
      • 2.4再次运行测试文件
    • 3.优化流程

mysbatis-plus乐观锁原理:
mysbatis-plus进行修改操作时,会将数据库中version字段的值拿出来和上一个查询时的得到的version值做对比,如果两个值相同则执行修改操作。若不相同,不执行修改操作。

1.场景

	阎王看孙悟空能活500岁很不爽,让判官甲给孙悟空削去400岁。
	过了一会阎王感觉削多了,让判官乙再去给加上孙悟空加上300岁,只削孙悟空100岁就行了。 
	没想到判官甲偷懒了,和判官乙近乎同时操纵的生死簿。
	这样甲拿出来是500岁,乙拿出来也是500岁。
	甲拿的500岁减去400岁变为100岁存入数据库,乙拿的500岁加上300岁变为800岁存入生死簿。
	没错判官甲的操作被覆盖了,孙悟空变成800岁了。

1.1.模拟冲突

代码,建立测试文件

	@Test
    void OptimisticLock(){
        Students student1 = studentsMapper.selectById(1);
        System.out.println("孙悟空的年龄 甲:" + student1.getAge());

        Students student2 = studentsMapper.selectById(1);
        System.out.println("孙悟空的年龄 乙:" + student2.getAge());

        student1.setAge(student1.getAge()-400);
        int result = studentsMapper.updateById(student1);
        System.out.println("甲是否更改年龄 : " + student1.getAge());

        student2.setAge(student2.getAge()+300);
        int result2 = studentsMapper.updateById(student2);
        System.out.println("乙是否更改年龄 : " + student2.getAge());
        
    }

运行结果:,,,,这里可以看到孙悟空的年龄变为了800岁,与阎王400岁的要求不符。
在这里插入图片描述

2.添加乐观锁

2.1数据库添加字段

在这里插入图片描述

2.2配置文件中增加乐观锁拦截器

@Configuration
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor MybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //配置mybatisplus分页拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        //添加乐观锁拦截器
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }

}

2.3类的属性上添加注解

在这里插入图片描述

2.4再次运行测试文件

说明乙修改数据库的操作并没有进行。
在这里插入图片描述

测试结果变为了100,也说明判官乙的操作并没有并没有进行。
在这里插入图片描述

3.优化流程

将乙更改年龄的代码修改为

   student2.setAge(student2.getAge()+300);
        int result2 = studentsMapper.updateById(student2);
        System.out.println("乙是否更改年龄 : " + result2);
        if (result2 == 0){
            Students student3 = studentsMapper.selectById(student2);
            student3.setAge(student3.getAge()+300);
            int result3 = studentsMapper.updateById(student3);
            System.out.println("乙是否更改年龄 : " + result3);
        }

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/30982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大一学生WEB前端静态网页——旅游网页设计与实现-张家口 6页

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 游景点介绍 | 旅游风景区 | 家乡介绍 | 等网站的设计与制作| HTML期末大学生网页设计作业 HTML:结构 CSS:样式 在操作方面上运…

【电力负荷预测】模拟退火算法结合狮群算法优化Elman神经网络电力负荷预测【含Matlab源码 1454期】

⛄一、模拟退火算法简介 1 引言 模拟退火算法(Simulated Annealing,SA)的思想最早由Metropolis等人于1953年提出:Kirkpatrick于1983年第一次使用模拟退火算法求解组合最优化问题[1] 。模拟退火算法是一种基于MonteCarlo迭代求解策略的随机寻优算法&…

图文详解Linux基础经典教程(09)——部署项目至CentOS

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 概述 在之前的操作里,我们在CentOS中安装了JDK、Tomcat、MySQL。接下来,我们需要将JavaWeb项目部署至CentOS。 项目开发 请在IDEA中开发JavaWeb项…

SpringBoot SpringBoot 开发实用篇 6 监控 6.3 actuator

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.3 actuator6.3.1 actuator6.3.2 监控原理6.3.3 小结6 监控 …

Win10下安装CARLA

在仿真环境中要使用lidar进行测试,目前prescan和matlab的lidar扫描方式无法设置,而CARLA中lidar是机械扫描形式,符合需求故选择该软件,只是测试不想重装系统,便在win10下进行安装测试。 1. 安装前需要安装的软件 1. …

小白必看 最核心的5大TikTok视频营销策略(附赠工具)

数据显示,TikTok的用户月人均使用时长达到了每月23.6小时,超过了YouTube的23.2小时。TikTok的用户支出在2022年第一季度达到了8.4亿美元,迄今为止其用户支出总额已超过46亿美元。可见,Tiktok是目前发展相对较好的的短视频社交媒体…

网页JS自动化脚本(一)安装油猴或暴力猴等脚本管理器并新建脚本

在我们的工作生活当中使用网页的机会越来越高,很多时候要进行重复的操作,所以进行一些JS脚本就成了可选项首先我们要在网页浏览器中安装上脚本管理器,这里示范的是安装暴力猴,是一个开源的免费的小软件,是在github上的一款软件,下载下来之后名称为Violentmonkey_2.13.0_chrome.…

Node与浏览器平台下的Event loop

Event loop 浏览器中的Event loop 浏览器平台下一共有两个任务队列,一个是宏任务一个是微任务。 从上至下执行所有的同步代码执行过程中将遇到的宏任务与微任务添加至相应的队列同步代码执行完毕后,执行满足条件的微任务回调微任务队列执行完毕后执行…

C# 加解密之AES

从这一篇开始呢,写一下常用的一些加解密方式。一般我们来说呢,对于加密,我们分为可逆和不可逆。可逆加密又可分为对称加密(AES、DES等)和非对称加密(RSA),还有就是一些编码加密等&am…

适用于C/C++开发人员的HOOPS

1.编译和运行时信息 1.1编制和执行 编译和运行基于C的应用程序需要以下步骤: 编译: 所有3DGS应用: hoops.lib 使用HOOPS/MVO的应用: hoops_mvo.lib 使用HOOPS/Stream的应用: hoops_stream.lib 执行:确保以下本地DLL位于应用程序的目录或…

学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作 dreamweaver网页设计与制作代码 web前端期末大作业

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

MCE | 癌症诊断和靶向治疗的“遍地开花”

据研究报道,很多癌细胞分泌的外泌体 (Exosome) 比正常细胞分泌的多 10 倍以上。外泌体参与了癌症的发生、进展、转移和耐药性,并通过转运蛋白和核酸,建立与肿瘤微环境的联系。例如,外泌体可导致免疫逃逸,癌细胞的免疫逃…

java 云MAS业务平台_中国移动

云MAS业务平台_中国移动http://mas.10086.cn/login 首页可下载不同协议的接口对接文档,这里以https为例 接口报文数据结构 连接地址:https://:/sms/submit 请求方式:post 数据类型:json(base64加密) A:请求报文内容(一对一或多对一模式*注1): 名称类型说明ecNameSt…

企业年会直播来个虚拟舞台场景如何?

阿酷TONY / 2022-11-21 / 长沙 绿幕抠像 虚拟场景(三维场景)实时渲染,降低直播成本,带来线下活动所没有的沉浸式视听体验,来吧,来一场精彩纷呈的虚拟年会直播吧。 目录 1. 绿幕虚拟直播间 2. 虚拟场景(…

html实现爱情浪漫表白甜蜜时刻(附源码)

文章目录1.设计来源1.1 主界面1.2 相识界面1.3 相知界面1.4 相爱界面2.效果和源码2.1 动态效果2.2 源代码源码下载作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/128006618 html实现爱情浪漫表白甜蜜时刻(附源码) html爱…

web前端课程设计——重庆旅游7页 HTML+CSS+JavaScript

👨‍🎓静态网站的编写主要是用 HTML DⅣV CSSJS等来完成页面的排版设计👩‍🎓,一般的网页作业需要融入以下知识点:div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉…

数据结构 | 栈和队列

… 📘📖📃本文已收录至:数据结构 | C语言 更多知识尽在此专栏中!文章目录📘前言📘正文📖栈📃结构📃初始化📃销毁📃入栈、出栈📃查看栈…

化工机械基础试题及答案

一、 名词解释(10分) 1、无力矩理论:在旋转薄壳的受力分析中忽略了弯矩的作用,该情况下的应力状态和承受内压的薄膜相似,又称薄膜理论。 2、法兰的公称压力:以16MnR在200℃时的力学性能为基础,其…

力扣刷题(代码回忆录)——动态规划

关于动态规划,你该了解这些!动态规划:斐波那契数动态规划:爬楼梯动态规划:使用最小花费爬楼梯本周小结!(动态规划系列一)动态规划:不同路径动态规划:不同路径…

在vmware虚拟机中安装Linux系统CentOS7详细教程

一、CentOS的下载 CentOS是免费版,推荐在官网上直接下载。 https://www.centos.org/download/ DVD ISO:普通光盘完整安装版镜像,可离线安装到计算机硬盘上,包含大量的常用软件,一般选择这种镜像类型即可。 Everythin…