欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MybatisPlus的乐观锁

程序员文章站 2022-07-13 09:20:41
...

1.乐观锁和悲观锁概念和理解

相关的定义和概念在学习Redis的事务已经做过笔记,这里就不重复写了

2.Mybatis Plus实现乐观锁

  1. 此处是在Mybatis Plus的自动填充的代码上进行修改

  2. 给数据库添加一个version字段
    MybatisPlus的乐观锁

  3. 给实体类添加对应的字段

package com.pning.pojo;

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

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private Date autoTime;//通过数据库字段设定默认值,数据库自己在插入的时候填充时间

    @TableField(fill = FieldFill.INSERT)
    private Date creatTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    @Version
    private int version;
}

  1. 注册组件
package com.pning.conf;

import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@EnableAutoConfiguration
@Configuration
public class MybatisPlusConfig {
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}

  1. 启动测试
 @Test
    public void OptimisticLockingSuccess(){
        //线程1
        User user1 = userMapper.selectById("1l");
        user1.setName("P_ning");
        //假如这时候有一个线程插入
        //线程2
        User user2 = userMapper.selectById("1l");
        user2.setName("Pning");
        userMapper.updateById(user2);//更新成功
        userMapper.updateById(user1);//更新失败
    }
相关标签: 数据库