MyBatis-Plus 插件-樂(lè)觀鎖插件

2022-03-25 14:35 更新

OptimisticLockerInnerInterceptor

當(dāng)要更新一條記錄的時(shí)候,希望這條記錄沒(méi)有被別人更新

樂(lè)觀鎖實(shí)現(xiàn)方式:

  • 取出記錄時(shí),獲取當(dāng)前 ?version ?
  • 更新時(shí),帶上這個(gè) ?version ?
  • 執(zhí)行更新時(shí), ?set version = newVersion where version = oldVersion ?
  • 如果 ?version不對(duì),就更新失敗

樂(lè)觀鎖配置需要兩步

1、配置插件

  • spring xml 方式:
<bean class="com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor" id="optimisticLockerInnerInterceptor"/>

<bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor">
    <property name="interceptors">
        <list>
            <ref bean="optimisticLockerInnerInterceptor"/>
        </list>
    </property>
</bean>

  • spring boot 注解方式:

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    return interceptor;
}

2、在實(shí)體類的字段上加上@Version注解

@Version
private Integer version;

說(shuō)明:

  • 支持的數(shù)據(jù)類型只有:?int,?Integer,?long?,?Long?,?Date?,?Timestamp?,?LocalDateTime ?
  • 整數(shù)類型下 ?newVersion = oldVersion + 1 ?
  • ?newVersion會(huì)回寫(xiě)到 ?entity
  • 僅支持 ?updateById(id)? 與 ?update(entity, wrapper)? 方法
  • 在 ?update(entity, wrapper)? 方法下, ?wrapper不能復(fù)用!!!

示例:

// Spring Boot 方式
@Configuration
@MapperScan("按需修改")
public class MybatisPlusConfig {
    /**
     * 舊版
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }

    /**
     * 新版
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)