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 如果是,那么就重写查询并修改。 

 

posted @ 2022-03-31 17:07  追星月?问酒缘。  阅读(31)  评论(0)    收藏  举报