MyBatis Plus 乐观锁

本文介绍了如何在MyBatis Plus中使用乐观锁,包括在数据库表和实体类中添加version属性,通过MetaObjectHandler设置初始版本号,配置类启用乐观锁,并进行了测试验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

人生格言

未来犹存,人生当前

乐观锁

乐观锁就是很多进程对数据库表中同一条数据进行操作,在操作之前所有的我们多会获取我们正在操作的数据的版本号,当我们操作完毕后我们更新数据时我们会再次检查版本号是否改变,如果改变做的操作就会失败,否则就会成功,这个保证了我们在对同一条数据进行修改时,只有一个进程可以修改成功。

在数据库的表中添加version属性

在这里插入图片描述

在表映射的实体类中添加version属性

package com.gsx.domain;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.Version;
import lombok.Data;

import java.util.Date;


@Data
public class User {
   
    private Long id;
    private String name;
    private Integer age;
    
### MyBatis Plus 乐观锁拦截器实现与用法 #### 拦截器的作用及其重要性 MyBatis-Plus 提供了一种强大的功能——拦截器,这使得开发者可以在 SQL 执前后的任意时刻执自定义逻辑。对于需要确保数据一致性和防止并发更新冲突的应用场景来说,乐观锁是一个非常重要的特性[^1]。 #### 实现乐观锁的具体步骤 为了在 MyBatis-Plus 中启用并利用乐观锁机制,需遵循如下具体步骤: 1. **实例化 `OptimisticLockerInnerInterceptor` 并注册至全局配置** 开发者应当创建一个新的 `OptimisticLockerInnerInterceptor` 对象,并将其加入到 MyBatis-Plus 的全局拦截器列表中。此过程通常是在应用程序启动阶段完成的,比如 Spring Boot 应用程序可以通过重写 `application.yml` 或 Java 配置类来添加该拦截器[^3]。 2. **实体类设计** 在对应的实体对象上声明一个名为 `version` 的字段用于存储版本号,并应用 `@Version` 注解标记这个字段。每当记录被成功更新时,MyBatis-Plus 将会自动增加此字段的值以反映最新的状态变化[^4]。 ```java import com.baomidou.mybatisplus.annotation.Version; public class User { private Long id; @Version private Integer version; // 版本号 // getter and setter methods... } ``` 3. **数据库表结构调整** 数据库中的相应表格也需要有一个整数类型的列用来保存版本信息,一般命名为 `version`。当执更新操作时,只有当传入的数据包内携带的旧版号等于当前的实际版号时才会真正提交更改请求;否则将抛出异常提示存在并发修改的风险。 4. **测试验证** 完成上述设置之后,可以编写单元测试案例模拟多线程环境下的竞争条件,观察是否能够有效阻止非法覆盖其他用户的未决变更为。正常情况下,在尝试第二次更新之前第一次更新应该顺利完成而不会引发任何错误;但如果两个事务几乎同时发起,则后者会被拒绝并返回失败消息给客户端处理[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值