• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

MybatisPlus:乐观锁

开发技术 开发技术 2周前 (04-06) 5次浏览

前言:

  乐观锁/悲观锁毫无疑问是面试经常被问到的,那么什么是乐观锁/悲观锁?

  乐观锁,就是非常乐观,无论做什么事都不会去上锁,仅在最后提交时采取做检查(是否有其它线程更改了他的资源

  悲观锁,悲观的态度,无论做什么事都会上锁(事情可以理解为事务),再去操作,这无疑很严谨,但也是浪费了资源

注意:并发问题的解决方式只能是变为串行

此篇主要讲解结合MybatisPlus的乐观锁机制

mybatisPlus的乐观锁插件

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

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

使用方法

MybatisPlus:乐观锁

 

 MybatisPlus:乐观锁

 

 

说明:

  • 支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime
  • 整数类型下 newVersion = oldVersion + 1
  • newVersion 会回写到 entity 中
  • 仅支持 updateById(id) 与 update(entity, wrapper) 方法
  • 在 update(entity, wrapper) 方法下, wrapper 不能复用!!!

mybatisPlus乐观锁插件的工作流程

先查询,获得版本号 version = 1(就是当前版本),用来判定是否有其它线程抢占这个资源,如果有,就更新失败,抢占线程更新成功!!

测试MybatisPlus乐观锁字段

1,数据库加字段(用作版本控制),默认值设为1

MybatisPlus:乐观锁

 

 2,实体添加对应的字段映射

MybatisPlus:乐观锁

 

 

3,注册主键

既然是乐观锁插件,自然要去配置bean

MybatisPlus:乐观锁

 

 注意:我这里用到是3.0.4版本,如果是3.4.0版本可以去mybatisPlus官网找最新配置类相关代码

现在,mybatisPlus的乐观锁插件就已经配置好了

 

明天我在去测试更新文章!!!!

 


程序员灯塔
转载请注明原文链接:MybatisPlus:乐观锁
喜欢 (0)