配置乐观锁和分页插件

简介: 配置乐观锁和分页插件

乐观锁

乐观锁实现原理:

实际上是在表中增加了一个version字段作为版本控制,version初值为1,当进行update操作时候,会先根据id查询出这一条记录,然后再进行更新操作,更新的时候判断查询出的version和当前表的version是否相同,如果相同则进行更新并且version+1,不相同则回滚。他人同时进行更新的时候,会拿自己查询出的version和表中version进行比较。如果相同则进行更新并且version+1,不相同则回滚。

写MybatisPlusConfig配置类

@EnableTransactionManagement
@Configuration
@MapperScan("com.atguigu.springbootmybatisplus.mapper")
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

给表添添加一个version字段

ALTER TABLE `user` ADD COLUMN `version` INT

在实体类中标注版本控制的字段

@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;

设置插入时自动填充version = 1

image.png

测试乐观锁成功的情况

/**
 * 测试乐观锁成功的情况
 */
@Test
void testOptimisticLocker(){
    User user = userMapper.selectById(1654374884886777857L);
    System.out.println(user);
    user.setName("xiaozhao");
    //user.setVersion(user.getVersion()-1);
    userMapper.updateById(user);
}

测试模拟并发时已经修改的数据

/**
 * 测试乐观锁成功的情况
 */
@Test
void testOptimisticLocker(){
    User user = userMapper.selectById(1654374884886777857L);
    System.out.println(user);
    user.setName("xiaozhao");
    user.setVersion(user.getVersion()-1);
    userMapper.updateById(user);
}
相关文章
|
2天前
|
SQL Java 数据库连接
mybatis常见分页技术和自定义分页原理实战
mybatis常见分页技术和自定义分页原理实战
|
2天前
|
SQL 前端开发 Java
通过使用Mybatis插件来实现数据的分页功能
通过使用Mybatis插件来实现数据的分页功能
|
10月前
|
SQL Java 数据库连接
Mybatis 是如何进行分页的,分页插件的原理是什么?
Mybatis 是如何进行分页的,分页插件的原理是什么?
108 0
|
10月前
|
SQL Oracle 关系型数据库
什么是分页?如何使用分页?(一)
什么是分页?如何使用分页?
117 0
|
7月前
|
Java 数据库 Spring
【异常解决】解决mybatis-plus分页查询默认最多查询500条记录的问题,真是个大坑啊
【异常解决】解决mybatis-plus分页查询默认最多查询500条记录的问题,真是个大坑啊
158 0
|
7月前
|
SQL 前端开发
JavaWeb12(实现基础分页&模糊查询的分页)
JavaWeb12(实现基础分页&模糊查询的分页)
|
10月前
|
SQL 存储 关系型数据库
什么是分页?如何使用分页?(二)
什么是分页?如何使用分页?
53 0
|
11月前
|
SQL 前端开发 数据库
Mybatis-Plus分页插件查询慢解决方案
Mybatis-Plus分页插件查询慢解决方案
644 0
|
11月前
|
Java 数据库连接 数据库
Mybatis-Plus 进阶开发-自定义乐观锁插件
有的时候我们需要对mybatis-plus的乐观锁插件进行自定义修改。那么其实mybatis 是已经有个默认的实现,我们只需要将其继承并扩展即可。 0. OptimisticLockerInnerInterceptor 介绍 当要更新一条记录的时候,希望这条记录没有被别人更新 乐观锁实现方式: 取出记录时,获取当前 version 更新时,带上这个 version 执行更新时, set version = newVersion where version = oldVersion 如果 version 不对,就更新失败 但是我们也可以根据自己的业务需求实现自定义的乐观锁插件。 Mybati
410 0
|
XML SQL 设计模式
谈谈 MyBatis 的插件,除了分页你可能还有这些使用场景
前言 扩展性是衡量软件质量的重要标准,MyBatis 作为一款优秀的持久层框架自然也提供了扩展点,那就是我们今天谈到的插件。MyBaits 的插件拦截内部组件方法的执行,利用插件可以插入自定义的逻辑,例如常用的支持物理分页的 PageHelper 插件。
233 0