欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MybatisPlus学习笔记------乐观锁

程序员文章站 2022-07-13 09:20:53
...

官网: MyBatis-Plus

乐观锁

​ 乐观锁:乐观,总是认为不会出现问题,无论干什么都不会上锁!如果 出现了问题,再次更新值测试。 version、new version

​ 悲观锁:悲观,总是认为到处都是问题,无论干什么都会上锁!

乐观锁机制

实现方式:

  • 取出记录时,获取当前的version
  • 更新时,带上这个version
  • 执行更新时,set version = newVersion where version = oldVersion
  • 如果version不对,就更新失败

sql语句:

update user set name = 'update',version = newVersion where id = 100 and version = oldVersion

MyBatisPlus使用乐观锁

  1. 在数据库中添加version字段,默认值为1

  2. 在pojo实体类中添加version属性,并标注@version注解

    @Version
    private Integer version;
    
  3. 注册乐观锁插件

    1. springboot注册
    @EnableTransactionManagement
    @MapperScan("com.xyc.mapper")
    @Configuration
    public class MyBatisPlusConfig {
    
        //注册乐观锁插件
        @Bean
        public OptimisticLockerInterceptor optimisticLockerInterceptor() {
            return new OptimisticLockerInterceptor();
        }
    
    
    }
    
    

    ​ b. spring.xml注册

    <bean class="com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor"/>
    

  4. 测试

    成功案例:(单线程)

    失败案例:(模拟多线程)

        //测试乐观锁
        //更新成功案例   单线程
        @Test
        public void testLock1(){
            User user = userMapper.selectById(0L);
            user.setName("痛苦之拥");
            user.setAge(14);
            int result = userMapper.updateById(user);
        }
        //更新失败案例   模拟多线程并发操作
        @Test
        public void testLock2(){
            //模拟第一个用户正在对一条信息进行修改,此时还没有完成修改
            User user1  = userMapper.selectById(1L);
            user1.setName("盖伦");
            user1.setAge(19);
    
            //突然出现第二个用户对该信息进行修改,并在第一个用户提交修改之前修改了该信息
            User user2 = userMapper.selectById(1L);
            user2.setName("德玛西亚之力");
            user2.setAge(18);
            userMapper.updateById(user2);
            //然后第一个用户提交了修改,如果没有加乐观锁,本次修改将会提交成功并覆盖第二个用户提交的修改
            //但是在加了乐观锁之后,更新失败。因为在user1.version != version
            userMapper.updateById(user1);
        }
    

    测试结果:

    MybatisPlus学习笔记------乐观锁

相关标签: MyBatis-Plus笔记