MyBatisPlus插件扩展_OptimisticLockerInterceptor乐观锁插件的使用
生活随笔
收集整理的这篇文章主要介绍了
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乐观锁插件的使用的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: MyBatisPlus插件扩展_Perf
- 下一篇: MyBatisPlus中自定义全局操作流