MybatisPlus 实现乐观锁

乐观锁介绍:

乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。那么我们如何实现乐观锁呢,一般来说有以下2种方式:

1.使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据。

MyBatisPlus 就为我们提供了乐观锁的插件;

实现方法:1.插件配置

<bean class="com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor"/>

配置位置

<bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">

<property name="plugins">

<bean class="com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor"/>

 </property>

</bean>

2.注解实体字段 @Version 必须要!

示例:

public static void update() {
		ApplicationContext context =	new ClassPathXmlApplicationContext("applicationContext.xml");
		StudentMapper studentmapper = (StudentMapper)context.getBean("studentMapper");
              //模拟两次顺序不同的访问线程
		student stu = new student(8,"wwzzz",23);
		stu.setVersion(1);
          
		student stu1= new student(8,"qqqqq",23);
		
		 //实现乐观锁的修改方法
		studentmapper.updateById(stu);
		studentmapper.updateById(stu1);
		
		
	}

执行结果:

我们可以看到 两次修改只有 第一次修改成功了/

发布了69 篇原创文章 · 获赞 5 · 访问量 2201

猜你喜欢

转载自blog.csdn.net/qq_42139889/article/details/104079495