乐观锁主要用于解决数据更新丢失的问题
比如:多个人同时修改一条数据时,最后一个提交的会把之前提交的全部覆盖(典型的就是12306抢票问题)
悲观锁:
简单来说就是串行操作,一个人在进行数据修改时,其他人不能对数据进行操作
乐观锁:
通过版本号version来控制数据的操作,当多人同时对一条数据进行操作时,会通过对版本号进行比较,当当前版本号与你的版本号相同,则操作数据成功,操作成功之后,版本号version加1,不同时操作失败
操作乐观锁
(1)首先我们需要在数据库中和bean实体类中添加version字段
数据库
bean实体类
然后我们需要在该字段上加注解@Version
@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;
@Version 是import com.baomidou.mybatisplus.annotation.Version下的
@TableField(fill = FieldFill.INSERT)
注解是mybatis plus中的自动填充功能,主要在插入数据时将version置为1
mybatis plus自动填充功能请查看我的另外一篇博客mybatis plus自动填充
(2)然后我们需要编写Mp配置类
在config包下创建一个MpConfig配置类
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("org.ww.mpdemo01.mapper")
public class MpConfig {
/**
* 乐观锁插件
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
@MapperScan(“org.ww.mpdemo01.mapper”) 这个注解我没有放在启动类里,而是放在了这个mybatis plus配置类中
(3)最后我们可以来进行测试
我们现在数据库中添加一条数据
我们可以看到他的版本号是1
然后我们通过id修改这条数据
//测试乐观锁
@Test
void OptimisticLocker(){
User user = userMapper.selectById(1293470678296637441L);
user.setName("hhhhh");
userMapper.updateById(user);
}
在查看数据库
此时version版本变成2了