MyBatisPlus插件扩展_OptimisticLockerInterceptor乐观锁插件的使用
场景
项目搭建专栏:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/37194
简介
意图:
当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = yourVersion+1 where version = yourVersion
- 如果version不对,就更新失败
实现
插件配置
来到项目下的applicationContext.xml中配置sqlSessionFactoryBean的地方。
<!-- 配置SqlSessionFactoryBeanMybatis提供的: org.mybatis.spring.SqlSessionFactoryBeanMP提供的:com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean--><bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean"><!-- 数据源 --><property name="dataSource" ref="dataSource"></property><property name="configLocation" value="classpath:mybatis-config.xml"></property><!-- 别名处理 --><property name="typeAliasesPackage" value="com.badao.beans"></property> <!-- 注入全局MP策略配置 --><property name="globalConfig" ref="globalConfiguration"></property> <!-- 插件注册 --><property name="plugins"><list><!-- 注册分页插件 --><bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"></bean><!-- 注册执行分析插件 --><bean class="com.baomidou.mybatisplus.plugins.SqlExplainInterceptor"><property name="stopProceed" value="true" /></bean><!-- 注册性能分析插件 --><bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor"><!-- 单位为毫秒 --><!-- <property name="maxTime" value="30" /> --><!--SQL是否格式化 默认false--><property name="format" value="true" /></bean><!-- 注册乐观锁插件 --><bean class="com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor"></bean></list></property> </bean>
添加Version
1.实体类添加Version
@Version
private Integer version;并生成set和get方法完整实体类package com.badao.beans;import java.io.Serializable;import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.annotations.Version;
import com.baomidou.mybatisplus.enums.IdType;
import com.mchange.util.FailSuppressedMessageLogger;@TableName(value="employee")
public class Employee extends Model<Model>{@TableId(value="id",type=IdType.AUTO)private Integer id;//@TableField(value="last_name")private String name;private String email;private Integer gender;private Integer age;@TableField(exist=false)private String remark;@Versionprivate Integer version;public Integer getVersion() {return version;}public void setVersion(Integer version) {this.version = version;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Integer getGender() {return gender;}public void setGender(Integer gender) {this.gender = gender;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}/**** 必须指定当前实体类的主键属性*/@Overrideprotected Serializable pkVal() {// TODO Auto-generated method stubreturn id;}}
2.数据库字段添加version
保存后给version赋值
3.测试
编写测试方法
/**** 乐观锁插件*/@Testpublic void testOptimisticLockerInterceptor() {//更新操作Employee employee = new Employee();employee.setId(3);employee.setName("OptimisticLockerInterceptor");employee.setAge(23);employee.setVersion(1);employeeMapper.updateById(employee);}
一定要设置版本!!! employee.setVersion(1);
运行结果
此时版本统一会成功更新。
更新成功后数据库的version字段会自动变成2。
假如此时另一个人也执行了更新操作,此时数据库的version会变成3。
然后自己再次进行更新时使用version为2去进行更新,结果:
更新了0条。
源码下载
https://download.csdn.net/download/badao_liumang_qizhi/11147706
MyBatisPlus插件扩展_OptimisticLockerInterceptor乐观锁插件的使用相关推荐
- 浅谈:MyBatis-Plus的CRUD与乐观锁,分页插件,逻辑删除
浅谈:MyBatis-Plus的CRUD与乐观锁,分页插件,逻辑删除 MyBatis-Plus官方文档连接 什么是MyBatis-Plus 请点击上面官方文档查看 代码演示:代码注释为功能详细解释 数 ...
- mybatis-plus使用乐观锁插件
参考博文 https://baijiahao.baidu.com/s?id=1659469738216922362&wfr=spider&for=pc 1 没有锁的风险 开发不设锁,就 ...
- MyBatis-Plus 高级功能 —— 乐观锁插件
一.引言 先来大概普及一下数据库锁的概念 悲观锁:时刻保持着一个悲观的态度,对谁都不信任,总想着别人会修改我的数据,所以为了防止别人修改,每次都会上锁,防止别人修改自己的数据.导致的后果就是每次想要拿 ...
- plus 什么是mybais_【mybatis-plus】什么是乐观锁?如何实现“乐观锁”
"乐观锁"这个词以前我也没听过.上次在测试需求的时候,查询数据库发现有一个 version 字段,于是请教开发这个字干嘛使, 人家回复我:乐观锁,解决并发更新用的.当时大家都忙,咱 ...
- 【mybatis-plus】什么是乐观锁?如何实现“乐观锁”
"乐观锁"这个词以前我也没听过.上次在测试需求的时候,查询数据库发现有一个version字段,于是请教开发这个字干嘛使,人家回复我:乐观锁,结局并发更新用的. 当时大家都忙,咱也不 ...
- 尚医通——后台搭建——MybatisPlus自动填充和乐观锁
目录标题 自动填充和乐观锁 1.更新操作 2.自动填充 1.1数据库修改 1.2实体类修改 1.3实现元对象处理器接口 3.乐观锁 3.1场景 4.乐观锁实现流程 4.1修改实体类 4.2创建配置文件 ...
- MP实战系列(十七)之乐观锁插件
声明,目前只是仅仅针对3.0以下版本,2.0以上版本. 意图: 当要更新一条记录的时候,希望这条记录没有被别人更新 乐观锁实现方式: 取出记录时,获取当前version 更新时,带上这个version ...
- 【Mybatis-Plus】(四)分页、乐观锁插件 通用枚举 多数据源
写在前面
- MyBatisPlus插件扩展_PerformanceInterceptor性能分析插件的使用
场景 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/37194 简介 性能分析拦截器,用于输出每条 SQL 语句及其执行时 ...
最新文章
- 重返学术界!​微软全球执行副总载沈向洋加盟清华大学!招收计算机视觉图形学博士生...
- 那些年,程序员读错的英语
- 第八九章 正态分布与超越正态
- hdu 5071 Chat(模拟|Splay)
- Maven的优势举例
- SAP CRM WebClient UI CL_BSP_MESSAGES
- NHibernate实例化类部分属性
- 如何实现Punycode中文域名转码
- bzoj 1731: [Usaco2005 dec]Layout 排队布局【差分约束】
- 高性能迷你React框架anujs1.0.8发布
- SpringBoot中接口跨域问题
- 全新APP软件游戏应用网站源码+支持WAP/Pbootcms内核
- 绝地求生信号服务器崩溃,绝地求生奔溃怎么办 吃鸡游戏崩溃解决方法
- Pywifi用法 - python
- ORB_SLAM2源码阅读(一)概要
- 哎我就不信了,Java IO有这么难吗?
- 企业微信爆粉方式有哪些
- python怎么编写重复程序,python重复执行怎么写
- 007-Cobbler批量自动化部署Windows10和Server 2019及激活
- 安卓微信浏览器使用input file图片上传无法触发change事件
热门文章
- java common io_Java之Apache Commons-IO使用精讲
- mysql 生明变量_MySql中的变量定义
- JUC系列(六) | Callable和Future接口详解使用、FutureTask应用 获取异步线程返回值
- MySQL5.7 Linux安装流程
- 东师计算机应用基础18秋在线作业3答案,奥鹏东师计算机应用基础15秋在线作业3试卷及答案(4)...
- php把int转string,如何在php中实现int转string
- netstat详解_需要!Linux常用监视和故障排查命令详解
- 20w7珠led驱动电源电路图_三种常用的LED驱动电源电路图详解!
- 开头和结尾标记 在不同系统_文本标记的宝藏平台——Docusky
- docker脚本安装 阿里云_让运行在 Docker 中的 Ghost 支持阿里云 OSS