在使用 MyBatis-Plus 查询时,也可以通过在 SQL 语句中添加 FOR UPDATE 子句来实现加上数据行的排它锁。同样地,要释放锁需要执行 commit 或 rollback 操作,这样会自动释放所有的锁。
具体步骤如下:
定义查询条件并执行查询操作
使用 MyBatis-Plus 执行查询操作时,先需要定义查询条件,例如:
QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.eq("id", 1).last("FOR UPDATE");User user = userMapper.selectOne(queryWrapper);System.out.println(user);
这里定义了一个 QueryWrapper 对象,用于设置查询条件。通过 eq() 方法设置查询条件为 id = 1,并调用 last() 方法添加 FOR UPDATE 子句。然后调用 selectOne() 方法执行查询操作,将查询结果保存在 User 对象中。
释放锁
同样地,要释放锁需要执行 commit 或 rollback 操作。例如:
QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.eq("id", 1).last("FOR UPDATE");User user = userMapper.selectOne(queryWrapper);System.out.println(user);try { // 业务操作 userMapper.updateById(user); userMapper.update(user, queryWrapper); sqlSession.commit(); // 释放所有锁} catch (Exception e) { sqlSession.rollback(); // 回滚事务,释放所有锁}
这里调用 updateById() 或 update() 方法执行业务操作,然后调用 commit() 方法提交事务,释放所有锁。如果操作出现异常,则调用 rollback() 方法回滚事务,同时也会释放所有锁。
关闭 SqlSession
最后需要记得关闭 SqlSession 对象,释放资源。
这样就可以使用 MyBatis-Plus 查询时加上数据行的排它锁,并在需要的时候释放锁。
来源地址:https://blog.csdn.net/qq_42374233/article/details/130493651