MyBatisPlus 乐观锁使用总结

概要

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

乐观锁实现方式:

取出记录时,获取当前version
更新时,带上这个version
执行更新时, set version = newVersion where version = oldVersion
如果version不对,就更新失败

使用事项

使用乐观锁之前一定要先查询拿到版本号
如果不拿到版本号直接更新,更新的数据将覆盖掉版本号为null

如果版本号为null,
再通过拿到版本号去更新数据,无论更新该条数据都不会更新版本号+1,一直为null。

流程调试1

如果一开始拿到的版本号是3,
在这里插入图片描述
但是更新的时候,别的线程先修改了版本号为5,
在这里插入图片描述
此条更新就失败,默认的更新如果成功会在执行这条更新语句的时候把版本号+1
在这里插入图片描述

总结

乐观锁的版本是在插入数据的时候自动填充的,更新的时候不做自动填充。
1.如果实体类配置了version该字段@TableField(fill = FieldFill.INSERT_UPDATE)自动填充,但是在handler insertfill() 和updatefill没有配置,在更新操作中
version不会自动填充

2.如果实体类配置了version该字段值只配置@TableField(fill = FieldFill.INSERT)时自动填充,但是在handler updatefill配置了该自动自动填充,在更新操作中
version会自动填充

所以为了避免影响最好是实体类配置该字段@TableField(fill = FieldFill.INSERT)操作的时候自动填充。并且只在insertfill handler中自动填充该字段
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis-Plus 是一个在 MyBatis 基础上进行扩展的持久层框架,它提供了许多便捷的功能和增强的特性,其中包括乐观锁乐观锁是一种在并发环境下解决数据冲突的机制,它通过在更新数据时比较版本号来判断数据是否被其他线程修改过。在 MyBatis-Plus 中,你可以通过注解和实体字段来实现乐观锁。 下面是使用 MyBatis-Plus 乐观锁的步骤: 1. 在实体类中添加一个用于存储版本号的字段,通常是一个整型字段。 ```java public class User { // 其他字段... @Version private Integer version; // Getter 和 Setter 方法... } ``` 2. 在数据库表中添加一个与版本号字段对应的列。 3. 在执行更新操作时,通过 `@Version` 注解告诉 MyBatis-Plus 使用乐观锁。例如: ```java @Mapper public interface UserMapper extends BaseMapper<User> { @Update("UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id} AND version = #{version}") int updateWithVersion(User user); } ``` 在上面的示例中,`@Update` 注解中的 SQL 语句中包含了 `version = #{version}` 条件,表示只有当版本号匹配时才执行更新操作。 4. 在代码中调用更新操作时,需要先查询出要更新的数据,然后将版本号加一,并更新到数据库中。例如: ```java User user = userMapper.selectById(userId); user.setName("New Name"); user.setAge(25); int result = userMapper.updateWithVersion(user); if (result == 0) { // 更新失败,说明数据已被其他线程修改 // 可以进行相应的处理,如抛出异常或者重试操作 } else { // 更新成功 } ``` 在上述代码中,通过 `selectById` 方法查询出要更新的数据,然后将版本号加一,并将更新后的数据传入 `updateWithVersion` 方法中执行更新操作。如果更新失败(`result` 返回值为 0),则说明数据已被其他线程修改,可以根据实际需求进行相应的处理。 这就是使用 MyBatis-Plus 实现乐观锁的基本步骤。请注意,在使用乐观锁时,需要保证所有涉及到的操作都是通过 MyBatis-Plus 提供的方法进行,以确保乐观锁机制生效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值