乐观锁
当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
- 在mysql中添加version字段,并设置默认值1
- 在user实体类中进行填充
@Version //乐观锁version注解
private Integer version;
- 在mybatis-plus配置类中配置乐观锁插件
package mybatis_plus.config;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
public class MybatisPlusConfig {
@Bean
public OptimisticLockerInterceptor OptimisticLockerInnerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
- 测试乐观锁插入成功
@Test
void testOptimisticLocker(){
User user = userMapper.selectById(2l);
user.setName("love");
user.setEmail("123@qq.com");
userMapper.updateById(user);
}
@Test
void testOptimisticLocker2(){
User user = userMapper.selectById(2l);
user.setName("love");
user.setEmail("123@qq.com");
User user2 = userMapper.selectById(2l);
user2.setName("lover222");
user2.setEmail("123@qq.com");
userMapper.updateById(user2);
//如果没有乐观锁就会覆盖user2的值,这里加入乐观锁不会覆盖user2的值
userMapper.updateById(user);
}