MyBatisPlus —— 乐观锁

本文详细解析了乐观锁的概念,如何在MybatisPlus中应用,并通过实际案例演示了如何避免数据冲突,确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

乐观锁:

在面试过程中,我们经常会被问到乐观锁,悲观锁!其实非常简单!

  • 乐观锁:顾名思义十分乐观,他总认为不会出现问题,无论干是什么都不去上锁!如果出现问题,再次更新值测试
  • 悲观锁:顾名思义非常悲观,他总是认为总是出现问题,无论干什么都会先去上锁!再去操作!

MybatisPlus官网中关于乐观锁插件配置:https://mp.baomidou.com/guide/interceptor-optimistic-locker.html

乐观锁机制:

当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:

  • 取出记录时,获取当前version
  • 更新时,带上这个version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果version不对,就更新失败

以上是MybatisPlus官方对于乐观锁的描述,个人认为已经非常透彻!!!

通俗点来解释就是:

  1. 在对要进行操作的数据库数据操作前,首先对取出来数据获取一个version(版本号)
  2. 程序对数据进行操作时,将这个version也进行更新。version+1,升级版本号
  3. 在数据库对数据执行更新操作时, 在数据修改前判断现在这条数据的version是否等于我取出来数据时的version(set version = new Version where version = oldVersion())
  4. 如果现在的version不等于我取出来的时候的version,就说明这条数据在我操作过程中,有人操作过,就更新失败,防止别人在我操作时,对这条数据进行了更新,但是我不知道,将更新后的数据覆盖,但是如果现在version等于执行前获取的version的话,就正常执行。

但是代码中是怎么实现的呢?

举个栗子:这个表就是MybatisPlus官网---快速开始的案例表:

现有一张 User 表,其表结构如下:

idnameageemailversioncreate_timeupdate_time
1Jone18test1@baomidou.com1
2Jack20test2@baomidou.com1
3Tom28test3@baomidou.com1
4Sandy21test4@baomidou.com1
5Billie24test5@baomidou.com1

现在我要修改表中的数据:

UPDATE  user SET name = jerry  ,version = version +1  where name WHERE name = jerry and version = 1

1
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值