@Version乐观锁配置mybatis-plus使用(version)

1:首先在实体类的属性注解上使用@Version

java 复制代码
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.Version;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.util.Date;

/**
 * @Description: 访客数据
 * @Author: xqf
 * @Date:   2023-07-27
 * @Version: V1.0
 */
@Data
@TableName("sys_visitant_data")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="sys_visitant_data对象", description="访客数据")
public class SysVisitantData {

	/**id*/
	@TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "id")
	private String id;
	/**访客openId*/
	@Excel(name = "访客openId", width = 15)
	@ApiModelProperty(value = "访客openId")
	private String visitantOpenId;
	@Version
	private Long version;
}

2:在数据库表中添加version字段,注意实体类使用是long和int类型(和默认值为0)

3:在mybatis-plus拦截器中添加OptimisticLockerInnerInterceptor()乐观锁拦截器

java 复制代码
@Configuration
@MapperScan(value={"org.demo.modules.**.mapper*"})
public class MybatisConfig {
@Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor= new MybatisPlusInterceptor();
        //添加分页拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        //添加乐观锁拦截器
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

4:demo(version字段版本会自动每次加一操作)

java 复制代码
@PostMapping("/apply2")
    public Result<?> apply2() {
        SysVisitantData visitantData = sysVisitantDataService.getById("1724065295435689986");
        Integer visitantNumber = visitantData.getVisitantNumber();
        System.out.println("开始#2:" + visitantNumber);
        visitantData.setVisitantNumber(visitantNumber + 5);
        boolean flag = sysVisitantDataService.updateById(visitantData);
        if (!flag){
            throw new JeecgBootException("2保存失败");
        }
        System.out.println("更新#2:" + visitantData.getVisitantNumber());
        return Result.OK();
    }
相关推荐
砍材农夫43 分钟前
spring|spring web|拦截器、过滤器、aop
java·spring boot·spring·spring cloud
小此方2 小时前
「C++AI大模型接入SDK」(一) API接入与本地两种方式对比、API Key获取、API报文详解与简单API的构建
开发语言·c++·人工智能
wuyk5552 小时前
Python实战项目02:学生成绩管理系统(控制台|CSV导出|完整落地)
开发语言·python
mldong8 小时前
一个 App,十三套后端:手机审批端 uni-jeeflow-app 开源了
java·架构
tqs_123459 小时前
MySQL RR隔离级别死锁|Gap间隙锁、临键锁,订单并发范围查询死锁根因方案
java
逆境不可逃9 小时前
Pi Agent 学习笔记:多个工具怎样并行执行
java
浪子明X9 小时前
十六位账本怎样发现传输差错:Internet Checksum 生活类比
开发语言
Flynt10 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来
java·jvm·后端
Bs_MoneyMagnet10 小时前
基于springboot+vue的个人健康管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·vue3·springboot3·计算机毕业设计
星云API技术支持10 小时前
企业微信二次开发:群权限设置、成员管理与群资料维护的接口组合实践
java·前端·企业微信