乐观锁
当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:
- 取出记录时,获取当前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);
}

本文介绍了一种在数据库更新操作中防止并发冲突的方法——乐观锁,并详细展示了如何在MyBatis Plus框架中实现该功能。通过添加版本字段并利用MyBatis Plus提供的乐观锁插件,可以有效避免数据覆盖的问题。
2803

被折叠的 条评论
为什么被折叠?



