MybatisPlus的乐观锁插件使用!

本文代码样例均已上传至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);
    }

相关文章

1.pom.xml引入依赖 <dependency> <gro...
<?xml version="1.0" encoding=&a...
准备工作 ① 创建数据库&数据表 ## 创建数据库 CREA...
MyBatis逆向工程是指根据数据库表结构自动生成对应的实体类、...
MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串...
resultMap作用是处理数据表中字段与java实体类中属性的映射关...