什么是乐观锁?
SpringBoot项目中如何使用Mybatis-plus实现乐观锁
1、乐观锁
主要用来解决丢失更新问题
2、什么是丢失更新
丢失更新:当两个用户,用户A和用户B对同一数据C的年龄(10)进行修改时,因为即使在高并发的时候,提交也会有先后顺序,A将C的年龄10修改为20之后,B将C的年龄10修改为30,最后查询数据时,查询的是B修改后的数据,这就是丢失更新正确的情况应该是,A先将年龄修改为20,B修改20为30,而不是两个用户同时修改10
3、怎么解决丢失更新问题
针对丢失更新问题,一般有两种解决方案:悲观锁、乐观锁。悲观锁: 当A用户进行修改时,其他用户等待,不能对数据进行操作,等待A操作完成,效率低乐观锁:在数据中添加一个字段,版本version,当查询数据时获取当前版本号,更新时带着版本号执行更新后版本号+1,如果版本号不对,则更新失败。
4、什么时候使用乐观锁
提到乐观锁就要简单回顾一下事务,事务有四大特性:原子性 一致性 隔离性 持久性当我们单个用户操作的时候,则不需要考虑事务的隔离性,当产生高并发时,多个用户同时对数据库进行操作,如果不考虑事务隔离性,在用户进行查询操作时,会产生脏读、幻读、不可重复读等问题.在用户进行修改操作时,会产生丢失更新问题.此时用到乐观锁
5、应用场景
在12306抢票中,当某用户支付成功时,其他用户就无法进行抢购支付
乐观锁的具体代码实现
1、 增加字段和属性
给数据库增加一个 version字段 int类型
给实体类增加一个version属性
2、添加注解
@Version
private int version;
3、