MybatisPlus的乐观锁
程序员文章站
2022-07-13 09:20:41
...
Mybatis Plus添加乐观锁
1.乐观锁和悲观锁概念和理解
相关的定义和概念在学习Redis的事务已经做过笔记,这里就不重复写了
2.Mybatis Plus实现乐观锁
-
此处是在Mybatis Plus的自动填充的代码上进行修改
-
给数据库添加一个
version
字段 -
给实体类添加对应的字段
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;
}
- 注册组件
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();
}
}
- 启动测试
@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);//更新失败
}
上一篇: java线程池分类及应用
下一篇: Map集合