乐观锁:当用户对数据表里的数据进行修改时,会与数据表的version版本号进行比较,当version版本号与数据表版本号一致时,可以进行修改。否则认为这不是最新的一次修改,别人已经修改过了。
应用实例:当票务系统仅剩一张票时,所有人会抢这一张票。张三抢这个票,他的version号与数据表version一致,故他可以支付成功,支付成功后数据表的version号会更新。其他人购买时,version版本号和数据表的version号不一致,所以购买失败。
使用步骤:
1、给数据表增加version字段作为版本号(version最好设置默认为1,当version为null时乐观锁不起作用)。
2、给实体类增加version属性作为版本号,并用@Version注解标注
3、引入乐观锁插件,在mybatis-plus官网中复制代码到配置类中
@Configuration
@MapperScan("com.lls.mybatisplus.mappers")
public class ProConfig {
//乐观锁插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}
4、测试乐观锁(要先查询数据再更新数据,不然体现不了乐观锁,其次当version为null时发现乐观锁失效,所以在数据库中最好给个默认值为1)
@SpringBootTest
class MybatisPlusApplicationTests {
@Autowired
UserMapper userMapper;
@Test
void contextLoads() {
User users = userMapper.selectById(13);
System.out.println(users);
users.setUsername("lld");
users.setPassword("6666");
userMapper.updateById(users);
}
}
5、运行前后对比
前:
后: