美文网首页
MP中使用乐观锁实现并发控制

MP中使用乐观锁实现并发控制

作者: 你家门口的两朵云 | 来源:发表于2021-02-03 23:34 被阅读0次

1.在数据库表中添加版本控制,version字段。

2,在实体类中加入对于的字段

    @Version
    private Integer version;

3,注册组件

@EnableTransactionManagement
@Configuration
@MapperScan("edu.hgnu.mapper")
public class MybatisPlusConfig {

    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();
    }
}

4,测试

@SpringBootTest
public class OptimisticLockerTest {


    @Autowired
    private UserMapper userMapper;


    @Test
    public void testOp(){
        //根据id查询出用户
        User user = userMapper.selectById(1356474887480340482L);
        user.setAge(21);
        user.setName("张芳2");
        user.setEmail("zhangfang@gmail.com");
        //更新操作
        userMapper.updateById(user);
    }


    @Test//演示并发问题,线程1在查询数据并更新数据user时,线程2插队查询了数据并修改,那么线程1应该时无法修改数据的。
    public void testOp2(){
        //线程1  根据id查询出用户
        User user = userMapper.selectById(1356474887480340482L);
        user.setAge(21);
        user.setName("张芳2");
        user.setEmail("zhangfang@gmail.com");

        //线程2  横插一脚,要查询 并更新数据;
        User user1 = userMapper.selectById(1356474887480340482L);
        user.setAge(21);
        user.setName("张芳2");
        user.setEmail("zhangfang@gmail.com");
        //线程2   更新操作
        userMapper.updateById(user1);

        //线程1   更新操作
        userMapper.updateById(user);
    }

}

扩展:什么时乐观锁:增加一个version字段版本控制,没次更新内容就newVersion=oldversion+1;

什么时悲观锁:任何时候,为了保证数据的正确性,都上锁。

相关文章

网友评论

      本文标题:MP中使用乐观锁实现并发控制

      本文链接:https://www.haomeiwen.com/subject/eljvtltx.html