java乐观锁

乐观锁:
查询数据,查询后的数据有个version字段
更新的数据的时候只有拿到这个version的才能修改
修改的时候改变version
执行update的时候如果返回为0,则证明这个version数据被修改

<mapper namespace="com.example.UserMapper">

    
    <select id="selectById" resultType="User">
        SELECT id, name, status, version FROM user WHERE id = #{id}
    select>

    
    <update id="updateStatus" parameterType="User">
        UPDATE user
        SET status = #{status}, version = version + 1
        WHERE id = #{id} AND version = #{version}
    update>

mapper>

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    @Transactional
    public void updateUserStatus(Long userId) {
        // 1. 查询数据时,获取版本号
        User user = userMapper.selectById(userId);
        if (user == null) {
            throw new RuntimeException("User not found");
        }

        // 2. 修改数据
        if (user.getStatus() == 1) {
            user.setStatus(2);
            // 3. 更新时检查版本号
            int rowsAffected = userMapper.updateStatus(user);
            if (rowsAffected == 0) {
                throw new RuntimeException("Update failed due to version conflict");
            }
        }
    }
}

你可能感兴趣的:(java,开发语言)