乐观锁就是解决更新丢失的情况,乐观锁的主要思想就是双方同时更新并且提交事务的时候,比如张三提交事务后,然后李四再提交事务,李四提交的最终数据会覆盖张三提交的数据。
- 解决以上问题的办法就是加乐观锁和死锁:这里只提点乐观锁后续提点死锁
1. 乐观锁的实现原理就是张三提交事务后然李四提交事务失败:实现流程是先设置一个version版本号,每次提交事务时会检查版本号是否与数据库的版本号一致,一致可以提交不一致则不能提交。
在数据库中添加version字段 之所以这样做呢是用mybatis-plus来进行乐观锁的时候需要这个字段去标记
切记要把version字段先设置初始值为1,不然会报错
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User5 {
@TableId(type = IdType.ID_WORKER)//数字类型的id使用,当类型为Long时默认使用,生成19位的Id值,
private String id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT) //进行添加操作时有值
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) //进行添加和修改操作时有值
private Date updateTime;
//添加version属性,注意添加@Version注解
//同时使用TableField设置初始值为1
@TableField(fill = FieldFill.INSERT)
@Version //不加version乐观锁就会不起作用,他更新时数据库的version不会加1,两个人拿到一个版本号也会执行更新后面提交的数据会覆盖前面提交的数据
private Integer version;
//添加删除标记
@TableLogic
@TableField(fill = FieldFill.INSERT)//设置初始值
private Integer deleted;
public User5(String name, Integer age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
}
切记需要配置乐观锁的插件
package cn.com.zzn.config;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.</