Mybatis-plus + springboot 乐观锁的使用(工作实践)

目录

  • 场景
  • 解决步骤
    • 数据库加version字段
    • DO和mapper加字段和注解
    • 加入MP插件配置
    • 将订单表抽取出来加上事务
  • 结果

场景

工作中一个商品的出库操作时,快速重复点击出库按钮,造成了多笔重复数据,撤回后使得库存数目变化,为了保证数据库的数据一致性,对订单表加上乐观锁。

解决步骤

数据库加version字段

Mybatis-plus + springboot 乐观锁的使用(工作实践)_第1张图片

DO和mapper加字段和注解

/**
     * 乐观锁积分
     */
    @Version
    @TableField(fill = FieldFill.INSERT)
    private Integer version;

Mybatis-plus + springboot 乐观锁的使用(工作实践)_第2张图片

加入MP插件配置

package net.work.config;

import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MpConfig {
    /**
     * 乐观锁 插件
     * @return
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}

将订单表抽取出来加上事务

后面不需要加.eq(“version”, version),因为mp自动加好了,如果加了会造成重复

 @Transactional(rollbackFor = BizException.class)
    public int orderChange(SaleOrderDO saleOrderDO, String orderId, Integer version) {
        return saleOrderMapper.update(saleOrderDO, new UpdateWrapper<SaleOrderDO>()
                .eq("order_id", orderId));
    }

结果

Mybatis-plus + springboot 乐观锁的使用(工作实践)_第3张图片

你可能感兴趣的:(收集,重难点收集,spring,boot,intellij-idea)