开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):项目技术点-MybatisPlus 实现乐观锁(1)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11272
项目技术点-MybatisPlus 实现乐观锁(1)
目录:
一.乐观锁
二.解决办法
三.数据库中添加 version
一.乐观锁
1. 乐观锁的含义:解决问题
(1)主要解决丢失更新
(2)如果不产生事务隔离性,产生的一些读的问题
脏读
不可重复读
幻读
(3)写的问题:丢失更新问题
注:多个人在同时修改一条记录,最后一个提交的会覆盖之前提交的这种现象就叫丢失更新
例:A 和 B 同时想修改 C 的工资条,A 先修改,B 后修改,B 的修改记录就会覆盖在 A 上面。
二、解决办法
(1)悲观锁:串行(一个人在修改的时候不允许同时进行修改,效率很低)
(2)乐观锁实现方式:
取出记录时,获取当前 version
更新时,带上这个 version
执行更新时,set version = newVersion where version =oldVersion
如果 version 不对,就更新失败
注:通过一个版本号来进行修改。
例:当 A 进行修改时被赋予1版本,在进行修改时要比较当前版本和数据库版本是否匹配,进行修改之后变成版本2,再当 B 进行修改时拿到的依旧时1版本,与修改之后的不匹配所以不能再进行修改。
(3)乐观锁的应用
12306官网上进行购票时,一张票可以被几十个甚至几百个人看到,但是最综那张票会归于提前提交订单并支付的人,而剩下的人只能换时间乘车或者进行补票。
三、数据库中添加 version
(1)添加 version 字段
ALTER TABLE user" ADD COLUMN.version"INT
(2)添加属性与注解
1@Version
2@TableField(fill = FieldFill.INSERT)
3private Integer version;
(3)添加一个插件
*乐观锁插件
*/
@Bean
pubIic OptimisticLockerInterceptor optimisticLockerInterceptor()
return newOptimisticLockerInterceptor();
强调一种写法
配置类:
@Configuration
@MapperScan(" ccm.atguigu.mybatis_plus.mapper")
public class MybatisPlusConfig