mybatis-plus usa una modificación de bloqueo optimista


Bloqueo optimista y pesimista

Cerradura optimista: muy optimista, piensa siempre que no habrá problemas, no importa lo que hagas, no te irás a cerrar. Si hay algún problema, actualice la prueba de valor nuevamente.

Cerradura pesimista: Muy pesimista, piensa que siempre hay problemas, no importa lo que hagas, ve a cerradura. Adelante y opere.

Cuando desee actualizar un registro, espere que otros no hayan actualizado este registro.
Implementación de bloqueo optimista:

  • Al buscar el registro, obtenga la versión actual
  • Al actualizar, traiga esta versión
  • Al realizar una actualización, establezca version = newVersion donde version = oldVersion
  • Si la versión es incorrecta, la actualización falla.
-- 多线程下 锁的处理
-- 乐观锁: 1. 先查询,获取版本号 version = 1
-- A 线程
update user set name = 'jack', version = version + 1
where id = 1 and version = 1

-- B 线程抢先完成,这个时候 更新version为 2,会导致A 修改失败
update user set name = 'jack', version = version + 1
where id = 1 and version = 1

solución

  1. Agregue el campo de versión en la tabla, tipo int, el valor predeterminado es 0

  2. En la medida en que la última versión del complemento sea 3.4.1, el complemento debe agregarse al interceptor. No inyectar frijoles.

	新版:OptimisticLockerInnerInterceptor 
	在3.4.1 中块过时的: OptimisticLockerInterceptor
  1. Agregue @Version al campo de versión para resolver.

código

package cn.bitqian.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * mybatis plus配置类
 * @author echo lovely
 * @date 2020/11/15 09:48
 */

@EnableTransactionManagement // 开启事务
@MapperScan("cn.bitqian.mapper")
@Configuration
public class MyBatisPlusConfig {
    
    

    // mybatis插件注册
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
    
    

        // 乐观锁
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();

        // 添加乐观锁到插件中
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());

        return mybatisPlusInterceptor;

    }


}


Es necesario agregar un campo

prueba

 @Test
 void testOptimisticLocker1() {
    
    
     User user = userMapper.selectById(1327447426226786310L);

     // 抢先修改
     User user1 = userMapper.selectById(1327447426226786310L);
     user1.setName("jjj");
     userMapper.updateById(user1);

     // 不会被修改,因为由于上面的修改version变了
     user.setName("bitqian666");
     userMapper.updateById(user);

 }

Supongo que te gusta

Origin blog.csdn.net/qq_44783283/article/details/109703836
Recomendado
Clasificación