一、场景分析
假设有这么一张表:
create table pms_sec_kill_sku
(
id int auto_increment comment '主键ID'
primary key,
spec_detail varchar(50) not null comment '规格描述',
purchase_price decimal(10, 2) not null comment '采购价格',
sale_price decimal(10, 2) not null comment '销售价格',
origin_stock int unsigned default '0' not null comment '初始库存',
sold_stock int unsigned default '0' not null comment '已售库存',
stock int unsigned default '0' not null comment '实时库存',
occupy_stock int unsigned default '0' not null comment '订单占用库存',
version int default 0 not null comment '乐观锁版本号',
created_time datetime not null comment '创建时间',
updated_time datetime not null comment '更新时间'
)
comment '促销管理服务-秒杀商品SKU';
一张简单的秒杀商品SKU表。使用 version 字段做乐观锁。使用 unsigned 关键字,限制 int 类型非负,防止库存超卖。
使用 MybatisPlus 来配置乐观锁:
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// 乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
@Bean
public DefaultDBFieldHandler defaultDBFieldHandler() {
DefaultDBFieldHandler defaultDBFieldHandler = new DefaultDBFieldHandler();
return defaultDBFieldHandler;
}
}

最低0.47元/天 解锁文章
1276

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



