数据库添加乐观锁
作用:为了解决事务并发带来的问题
介绍:就是给数据库的数据表添加一个字段version,在更新数据库记录是将version加1。
- 查询时记录获取当前的version
- 更新的时候,带上这个version
- 执行更新时,执行时的version要和查询时的version一致,并且给version+1;否则报错
操作流程
1.数据库中添加version
2.实体类的字段上加上 @Version //乐观锁Version注解
3.添加相关配置
package com.edu.config;
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;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@MapperScan("com.edu.mapper")
@EnableTransactionManagement
@Configuration // 配置类
public class MyBatisPlusConfig {
// 注册乐观锁插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
4.测试
@Test
public void testOptimisticLock2(){
// 线程1
User user = userMapper.selectById(1L);
user.setName("xiaobai");
user.setEmail("123123132@qq.com");
// 模拟另外一个线程执行了插队操作
// 线程2
User user2 = userMapper.selectById(1L);
user2.setName("xiaobai222222");
user2.setEmail("123123132@qq.com");
userMapper.updateById(user);
// 自旋锁来多次尝试提交
userMapper.updateById(user2);
}