当前位置: 首页 > article >正文

Mybatis-Plus实现乐观锁

MybatisPlusConfig

添加乐观锁插件

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {

    /**
     * 添加乐观锁插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

数据库表

关键字段version

create table if not exists tb_student
(
    id          bigint auto_increment comment '主键id'
        primary key,
    name        varchar(8)    not null comment '姓名',
    gender      int           not null comment '性别;1代表男,2代表女',
    age         int           not null comment '年龄',
    version     int default 1 not null comment '乐观锁',
    create_time datetime      not null comment '创建时间',
    update_time datetime      not null comment '更新时间',
    constraint id
        unique (id)
)
    comment '学生表';

insert into tb_student (id, name, gender, age, version, create_time, update_time)
values (null, '艾伦', 1, 15, 1, now(), now());

StudentEntity

使用@Version注解

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "tb_student")
public class StudentEntity {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @TableField(value = "name")
    private String name;

    @TableField(value = "gender")
    private Integer gender;

    @TableField(value = "age")
    private Integer age;

    @Version
    private Integer version;

    @TableField(value = "create_time")
    private LocalDateTime createTime;

    @TableField(value = "update_time")
    private LocalDateTime updateTime;
}

测试

    @Autowired
    private StudentMapper studentMapper;

    @Test
    public void test() {
        StudentEntity studentEntity = new StudentEntity();
        studentEntity.setId(1L);
        studentEntity.setAge(16);
        studentEntity.setVersion(1);
        studentEntity.setUpdateTime(LocalDateTime.now());
        studentMapper.updateById(studentEntity);
    }

查看SQL

==>  Preparing: UPDATE tb_student SET age=?, version=?, update_time=? WHERE id=? AND version=?
==> Parameters: 16(Integer), 2(Integer), 2023-12-02T10:25:33.361643700(LocalDateTime), 1(Long), 1(Integer)
<==    Updates: 1

http://www.kler.cn/a/154533.html

相关文章:

  • 【Linux】Ubuntu中muduo库的编译环境安装
  • Android OpenGL ES详解——glTexImage2D方法
  • GitLab 降级安装出现 500 错误,如何解决?
  • PostgreSQL TRUNCATE TABLE
  • OpenHarmony-1.启动流程
  • nginx源码安装配置ssl域名
  • TCA9548A I2C 多路复用器 Arduino 使用相同地址 I2C 设备
  • 【Pytorch 入门】DAY 4 损失函数 模型的保存与下载
  • 第十一节HarmonyOS 常用容器组件1-Row与Column
  • Linux的基本指令(五)
  • 【ArcGIS Pro微课1000例】0039:制作全球任意经纬网的两种方式
  • 为自己创建的游戏编程源码申请软件著作权详细流程(免费分享模板)
  • springboot数据格式验证——自定义日期格式验证及list验证
  • 大数据湖项目建设方案:文档全文101页,附下载
  • 判断是否有环形链表
  • 消息对列MQ
  • 【渗透】记录阿里云CentOS一次ddos攻击
  • 【Java 基础】16 泛型
  • 充电桩自检流程
  • 公司网站遇到HTTPS攻击,有什么办法解决
  • 百度下拉词挖掘工具,百度下拉词挖掘获取软件
  • python程序内存泄漏的解决方法
  • 分享几个可以免费使用GPT工具
  • 毕业论文管理系统的设计与实现
  • Docker 简介及其常用命令详解
  • Android 13 - Media框架(18)- CodecBase