加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

MybatisPlus的乐观锁插件使用!

发布时间:2021-05-21 07:43:12 所属栏目:大数据 来源: https://www.jb51.cc
导读:本文代码样例均已上传至Gitee:https://gitee.com/tqbx/springboot-samples-learn/tree/master/spring-boot-mybatis-plus-primer 乐观锁适用于 读多写少 的场景。 乐观锁的实现机制: 取出记录时,获取当前version 更新时,带上这个version 执行更新时, set

本文代码样例均已上传至Gitee:https://gitee.com/tqbx/springboot-samples-learn/tree/master/spring-boot-mybatis-plus-primer

乐观锁适用于读多写少的场景。

乐观锁的实现机制:

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

使用方法:

  • 在字段上加上@Version注解。
    // 版本号
    @Version
    private Integer version;
  • 支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime
  • 整数类型下 newVersion = oldVersion + 1
  • newVersion 会回写到 entity
  • 仅支持 updateById(id)update(entity,wrapper) 方法
  • update(entity,wrapper) 方法下,wrapper 不能复用!!!
  • 配置乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
  • 测试,为更新的实体设置期望的版本号:
    @Test
    void update() {
        //PDATE user SET name=?,update_time=?,version=? WHERE id=? 
        // AND version=? AND deleted=0
        int version = 2;
        User user = new User();
        user.setId(1320037517763842049L);
        user.setName("sm2");
        user.setVersion(version);//期望的版本号
        boolean b = userService.updateById(user);
        System.out.println(b);
    }

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读