场景

项目搭建专栏:

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乐观锁插件的使用相关推荐

  1. 浅谈:MyBatis-Plus的CRUD与乐观锁,分页插件,逻辑删除

    浅谈:MyBatis-Plus的CRUD与乐观锁,分页插件,逻辑删除 MyBatis-Plus官方文档连接 什么是MyBatis-Plus 请点击上面官方文档查看 代码演示:代码注释为功能详细解释 数 ...

  2. mybatis-plus使用乐观锁插件

    参考博文 https://baijiahao.baidu.com/s?id=1659469738216922362&wfr=spider&for=pc 1 没有锁的风险 开发不设锁,就 ...

  3. MyBatis-Plus 高级功能 —— 乐观锁插件

    一.引言 先来大概普及一下数据库锁的概念 悲观锁:时刻保持着一个悲观的态度,对谁都不信任,总想着别人会修改我的数据,所以为了防止别人修改,每次都会上锁,防止别人修改自己的数据.导致的后果就是每次想要拿 ...

  4. plus 什么是mybais_【mybatis-plus】什么是乐观锁?如何实现“乐观锁”

    "乐观锁"这个词以前我也没听过.上次在测试需求的时候,查询数据库发现有一个 version 字段,于是请教开发这个字干嘛使, 人家回复我:乐观锁,解决并发更新用的.当时大家都忙,咱 ...

  5. 【mybatis-plus】什么是乐观锁?如何实现“乐观锁”

    "乐观锁"这个词以前我也没听过.上次在测试需求的时候,查询数据库发现有一个version字段,于是请教开发这个字干嘛使,人家回复我:乐观锁,结局并发更新用的. 当时大家都忙,咱也不 ...

  6. 尚医通——后台搭建——MybatisPlus自动填充和乐观锁

    目录标题 自动填充和乐观锁 1.更新操作 2.自动填充 1.1数据库修改 1.2实体类修改 1.3实现元对象处理器接口 3.乐观锁 3.1场景 4.乐观锁实现流程 4.1修改实体类 4.2创建配置文件 ...

  7. MP实战系列(十七)之乐观锁插件

    声明,目前只是仅仅针对3.0以下版本,2.0以上版本. 意图: 当要更新一条记录的时候,希望这条记录没有被别人更新 乐观锁实现方式: 取出记录时,获取当前version 更新时,带上这个version ...

  8. 【Mybatis-Plus】(四)分页、乐观锁插件 通用枚举 多数据源

    写在前面

  9. MyBatisPlus插件扩展_PerformanceInterceptor性能分析插件的使用

    场景 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/37194 简介 性能分析拦截器,用于输出每条 SQL 语句及其执行时 ...

最新文章

  1. 重返学术界!​微软全球执行副总载沈向洋加盟清华大学!招收计算机视觉图形学博士生...
  2. 那些年,程序员读错的英语
  3. 第八九章 正态分布与超越正态
  4. hdu 5071 Chat(模拟|Splay)
  5. Maven的优势举例
  6. SAP CRM WebClient UI CL_BSP_MESSAGES
  7. NHibernate实例化类部分属性
  8. 如何实现Punycode中文域名转码
  9. bzoj 1731: [Usaco2005 dec]Layout 排队布局【差分约束】
  10. 高性能迷你React框架anujs1.0.8发布
  11. SpringBoot中接口跨域问题
  12. 全新APP软件游戏应用网站源码+支持WAP/Pbootcms内核
  13. 绝地求生信号服务器崩溃,绝地求生奔溃怎么办 吃鸡游戏崩溃解决方法
  14. Pywifi用法 - python
  15. ORB_SLAM2源码阅读(一)概要
  16. 哎我就不信了,Java IO有这么难吗?
  17. 企业微信爆粉方式有哪些
  18. python怎么编写重复程序,python重复执行怎么写
  19. 007-Cobbler批量自动化部署Windows10和Server 2019及激活
  20. 安卓微信浏览器使用input file图片上传无法触发change事件

热门文章

  1. java common io_Java之Apache Commons-IO使用精讲
  2. mysql 生明变量_MySql中的变量定义
  3. JUC系列(六) | Callable和Future接口详解使用、FutureTask应用 获取异步线程返回值
  4. MySQL5.7 Linux安装流程
  5. 东师计算机应用基础18秋在线作业3答案,奥鹏东师计算机应用基础15秋在线作业3试卷及答案(4)...
  6. php把int转string,如何在php中实现int转string
  7. netstat详解_需要!Linux常用监视和故障排查命令详解
  8. 20w7珠led驱动电源电路图_三种常用的LED驱动电源电路图详解!
  9. 开头和结尾标记 在不同系统_文本标记的宝藏平台——Docusky
  10. docker脚本安装 阿里云_让运行在 Docker 中的 Ghost 支持阿里云 OSS