MP实现乐观锁

本文介绍了如何在Java后端开发中利用MybatisPlus实现乐观锁机制,通过在数据库表中添加version字段,并在实体类中添加@Version注解,配合自定义元对象处理器和配置乐观锁插件,确保数据更新的线程安全。通过测试,展示了乐观锁在数据修改成功和失败时的SQL执行情况。
摘要由CSDN通过智能技术生成

主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新

(1)数据库中添加version字段

ALTER TABLE `user` ADD COLUMN `version` INT

(2)实体类添加version字段

并添加 @Version 注解

@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;

(3)元对象处理器接口添加version的insert默认值

@Override
public void insertFill(MetaObject metaObject) {
    ......
    this.setFieldValByName("version", 1, metaObject);
}

特别说明:

  • 支持的数据类型只有 int,Integer,long,Long,Date,Timestamp,LocalDateTime
    在MyBatis-Plus中,可以通过添加乐观锁拦截器来实现写锁的设置。乐观锁是一种假设在读取数据时不会有其他人修改的机制,只在更新数据时判断是否有其他人在此期间修改过数据。乐观锁适用于写较少的情况下,即冲突很少发生的场景,可以提高系统的吞吐量。如果是多写的情况,会经常产生冲突,这时使用乐观锁反而会降低性能,悲观锁更适合多写的场景。 要在MyBatis-Plus中设置写锁,可以通过添加乐观锁拦截器来实现。首先,在配置类中创建一个MybatisPlusInterceptor实例,并添加乐观锁拦截器。具体可以参考以下代码示例: @Configuration public class MpConfig { @Bean public MybatisPlusInterceptor mpInterceptor() { //1.定义Mp拦截器 MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor(); //2.添加乐观锁拦截器 mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return mpInterceptor; } } 通过以上配置,就可以实现在MyBatis-Plus中设置乐观锁实现写锁的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MyBatisPlus-乐观锁概念及实现步骤](https://blog.csdn.net/m0_61961937/article/details/126093547)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [MybatisPlus实现乐观锁](https://blog.csdn.net/m0_74340515/article/details/127847613)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值