4、MybatisPlus-乐观锁-02
测试MybatisPlus的乐观锁插件
1、给数据库中增加 version 字段!
2、实体类中添加乐观锁注解
@Version//乐观锁Version注解 private int version;
3、注册乐观锁组件
官网:https://baomidou.com/pages/0d93c0/#_2-%E5%9C%A8%E5%AE%9E%E4%BD%93%E7%B1%BB%E7%9A%84%E5%AD%97%E6%AE%B5%E4%B8%8A%E5%8A%A0%E4%B8%8A-version%E6%B3%A8%E8%A7%A3
@MapperScan("com.cn.springbootmybatisplus06.mapper") @EnableTransactionManagement//自动管理事务 @Configuration // 配置类 public class MyBatisPlusConfig { /** * 旧版 */ // @Bean // public OptimisticLockerInterceptor optimisticLockerInterceptor() { // return new OptimisticLockerInterceptor(); // } /** * 新版 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return mybatisPlusInterceptor; } }
4、测试乐观锁成功案例
//乐观锁测试成功案例 @Test void contextLoads4() { User user = userMapper.selectById(2l); user.setAge(17); user.setEmail("277456625@qq.com"); user.setName("zhaoliu"); int insert = userMapper.updateById(user); System.out.println(insert); }
5、测试乐观锁失败案例
//乐观锁测试失败案例 @Test void contextLoads5() { //A添加开始。。。。。 User user = userMapper.selectById(2l); user.setAge(16); user.setEmail("277456625@qq.com"); user.setName("zhaoliu"); //B添加开始。。。。。 User user1 = userMapper.selectById(2l); user1.setAge(19); user1.setEmail("1234567@qq.com"); user1.setName("lisshi"); //B插入。。。。成功 int insert1 = userMapper.updateById(user1); //A发线B已经插入,Version的值已经发生改变,因为使用了乐观锁,所以乐观锁判断值已经插入成功,所以值不会覆盖,A插入失败。
//可以使用自旋锁来多次尝试提交
int insert = userMapper.updateById(user); System.out.println(insert1); }
提示:如果注入失败,可以使用 IF 语句判断修改行数是否为 0 如果是,那么就重写查询并修改。