mybatis plus整合乐观锁

简介: mybatis plus整合乐观锁

公众号merlinsea


乐观锁介绍:


   乐观锁就是不通过物理加锁的方式以保证共享变量线程安全的一种设计思路。                具体设计思路如下:CAS【compare and swap】,首先在数据库表设计时增  

version字段,后续每次修改成功以后version字段都要自增。线程A首先读取到了某条记录【该条记录包含其version字段的值】,线程A修改了该条记录以后,将新的记录重新写会数据库的 时候,会比较数据库中这条记录的version还是不是自己之前读到的那个version,如果是的话说明线程A操作的中途没有其他 线程修改过该条记录,因此可以放心写回;如果不是的话说明线程A操作的中途有其他线程修改过了这条记录,因此线程A放弃本次 更新操作。

640.jpg


1、model实体类中增加@Version注解


@Data
@TableName("banner")
public class BannerDO {
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;
    private String img;
    private String url;
    private Integer weight;
    /**
     * @Version 是mybatis plus用于表示乐观锁机制的注解
     */
    @Version
    private Integer version;
}


2、增加乐观锁插件配置,并交由spring ioc管理

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        //乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}


3、乐观锁更新测试

   通过测试的结果可以发现,mybatis plus整合乐观锁底层其实就是会自动在where条件中拼接上【version=原version】的条件,以确保更新的时候的原子操作。

/**
 * 乐观锁测试
 * 因为开启了乐观锁配置,因此在更新的时候会自动拼接版本号字段
 */
@Test
public void testOptimi(){
    //先根据ID找记录,得到id 和 version
    BannerDO bannerDO = bannerMapper.selectOne(new QueryWrapper<BannerDO>().eq("id",3));
    //修改记录
    bannerDO.setUrl("upadte optimite");
    //以乐观锁的方式重新插入
    bannerMapper.updateById(bannerDO);
}

640.jpg


相关文章
|
7月前
|
Java 数据库连接 mybatis
Mybatis Plus保存数据返回主键id
Mybatis Plus保存数据返回主键id
305 1
|
7月前
|
Java 关系型数据库 数据库连接
MyBatis Plus 解决大数据量查询慢问题
MyBatis Plus 解决大数据量查询慢问题
|
4月前
|
SQL Java
9、Mybatis-Plus 乐观锁
这篇文章介绍了Mybatis-Plus中乐观锁的实现和使用流程,包括使用场景、在实体类中添加版本号字段、配置乐观锁插件以及通过测试验证乐观锁的效果,确保在并发环境下数据的一致性。
9、Mybatis-Plus 乐观锁
|
5月前
|
Java 数据库连接 测试技术
mybatis plus 获取新增实体的主键
mybatis plus 获取新增实体的主键
174 8
|
5月前
|
Java 数据库连接 数据库
mybatis plus 更新值为null的字段
mybatis plus 更新值为null的字段
67 7
|
5月前
|
Java 数据库连接 Spring
搭建 spring boot + mybatis plus 项目框架并进行调试
搭建 spring boot + mybatis plus 项目框架并进行调试
107 4
|
5月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
119 3
|
5月前
|
Java 数据库连接 数据库
mybatis plus 中增删改查及Wrapper的使用
mybatis plus 中增删改查及Wrapper的使用
262 3
|
5月前
|
算法 Java 数据库连接
mybatis plus 主键策略
mybatis plus 主键策略
62 2
|
6月前
|
XML 前端开发 Java
Mybatis-Plus乐观锁配置
Mybatis-Plus乐观锁配置