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并没有再将插队线程的值覆盖,这就是乐观锁的作用。

相关文章
|
5月前
|
SQL XML Java
8、Mybatis-Plus 分页插件、自定义分页
这篇文章介绍了Mybatis-Plus的分页功能,包括如何配置分页插件、使用Mybatis-Plus提供的Page对象进行分页查询,以及如何在XML中自定义分页SQL。文章通过具体的代码示例和测试结果,展示了分页插件的使用和自定义分页的方法。
8、Mybatis-Plus 分页插件、自定义分页
|
13天前
|
缓存 NoSQL Java
Mybatis学习:Mybatis缓存配置
MyBatis缓存配置包括一级缓存(事务级)、二级缓存(应用级)和三级缓存(如Redis,跨JVM)。一级缓存自动启用,二级缓存需在`mybatis-config.xml`中开启并配置映射文件或注解。集成Redis缓存时,需添加依赖、配置Redis参数并在映射文件中指定缓存类型。适用于查询为主的场景,减少增删改操作,适合单表操作且表间关联较少的业务。
|
2月前
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
400 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
2月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
2月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
4月前
|
SQL Java 数据库连接
解决mybatis-plus 拦截器不生效--分页插件不生效
本文介绍了在使用 Mybatis-Plus 进行分页查询时遇到的问题及解决方法。依赖包包括 `mybatis-plus-boot-starter`、`mybatis-plus-extension` 等,并给出了正确的分页配置和代码示例。当分页功能失效时,需将 Mybatis-Plus 版本改为 3.5.5 并正确配置拦截器。
1366 6
解决mybatis-plus 拦截器不生效--分页插件不生效
|
3月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
481 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
4月前
|
Java 关系型数据库 数据库连接
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
59 5
|
4月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
5月前
|
SQL Java
9、Mybatis-Plus 乐观锁
这篇文章介绍了Mybatis-Plus中乐观锁的实现和使用流程,包括使用场景、在实体类中添加版本号字段、配置乐观锁插件以及通过测试验证乐观锁的效果,确保在并发环境下数据的一致性。
9、Mybatis-Plus 乐观锁