MyBatisPlus —— 乐观锁

乐观锁:

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

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

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
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值