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);//更新失败
}
本文介绍如何使用MybatisPlus实现乐观锁功能。通过在实体类中添加版本字段,并利用MybatisPlus提供的自动填充功能及注册组件实现。通过示例演示了在并发环境下乐观锁的工作原理。
769

被折叠的 条评论
为什么被折叠?



