Mybatis-Plus学习(二):乐观锁插件

简介: Mybatis-Plus学习(二):乐观锁插件

先来看看官网的解释:

20210926103323264.png


乐观锁的配置需要两步:


1、配置插件



2021092610342498.png2021092610344672.png


package com.shang.config;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@MapperScan("com.shang.mapper")
@EnableTransactionManagement    //事务管理
@Configuration
public class MybatisPlusConfig {
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}


2、在实体类字段上添加注解



20210926103553612.png

package com.shang.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.Version;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableId(type = IdType.AUTO)        //设置id自增(雪花算法)
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @Version        //乐观锁version注解
    private Integer version;
}


3、测试一下



先用单线程看一下乐观锁能不能成功修改:

/**
     * 测试乐观锁成功
     */
    @Test
    public void testOptimisticLocker(){
        //1 查询用户
        User user = userMapper.selectById(1L);
        //2 修改用户
        user.setName("hahaha");
        user.setEmail("1600506991@qq.com");
        userMapper.updateById(user);
    }


测试乐观锁成功的运行结果:

20210926103838295.png


可以看到,能够成功修改。


再用一个线程去插队,看看乐观锁失败的效果:

/**
     * 测试乐观锁失败  多线程下
     */
    @Test
    public void  testOptimisticLocker2(){
        //线程1
        User user = userMapper.selectById(1L);
        user.setName("hahaha111");
        user.setEmail("1600506991@qq.com");
        //模拟另一个线程插队
        User user2 = userMapper.selectById(1L);
        user2.setName("hahaha222");
        user2.setEmail("1600506991@qq.com");
        userMapper.updateById(user2);   //插队,抢先更新
        //自旋锁来多次尝试提交
        userMapper.updateById(user);    //如果没有乐观锁,就会覆盖插队线程的值
    }


测试一下乐观锁失败的运行结果:

20210926104233655.png


可以看到,在线程2插队以后,原来的user并没有再将插队线程的值覆盖,这就是乐观锁的作用。

相关文章
|
3月前
|
SQL XML Java
8、Mybatis-Plus 分页插件、自定义分页
这篇文章介绍了Mybatis-Plus的分页功能,包括如何配置分页插件、使用Mybatis-Plus提供的Page对象进行分页查询,以及如何在XML中自定义分页SQL。文章通过具体的代码示例和测试结果,展示了分页插件的使用和自定义分页的方法。
8、Mybatis-Plus 分页插件、自定义分页
|
1天前
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
50 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
1天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
23天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
35 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
SQL Java 数据库连接
解决mybatis-plus 拦截器不生效--分页插件不生效
本文介绍了在使用 Mybatis-Plus 进行分页查询时遇到的问题及解决方法。依赖包包括 `mybatis-plus-boot-starter`、`mybatis-plus-extension` 等,并给出了正确的分页配置和代码示例。当分页功能失效时,需将 Mybatis-Plus 版本改为 3.5.5 并正确配置拦截器。
465 6
解决mybatis-plus 拦截器不生效--分页插件不生效
|
2月前
|
Java 关系型数据库 数据库连接
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
44 5
|
2月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
3月前
|
SQL Java
9、Mybatis-Plus 乐观锁
这篇文章介绍了Mybatis-Plus中乐观锁的实现和使用流程,包括使用场景、在实体类中添加版本号字段、配置乐观锁插件以及通过测试验证乐观锁的效果,确保在并发环境下数据的一致性。
9、Mybatis-Plus 乐观锁
|
3月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
3月前
|
Java 数据库 Spring
MyBatisPlus分页插件在SpringBoot中的使用
这篇文章介绍了如何在Spring Boot项目中配置和使用MyBatis-Plus的分页插件,包括创建配置类以注册分页拦截器,编写测试类来演示如何进行分页查询,并展示了测试结果和数据库表结构。
MyBatisPlus分页插件在SpringBoot中的使用