在MyBatis中可以通过版本号实现乐观锁,通过SQL语句中的FOR UPDATE实现悲观锁。
<update id="updateUser" parameterType="User">
update user
set name = #{name}, version = version + 1
where id = #{id} and version = #{version}
</update>
<select id="selectUserForUpdate" resultType="User">
select * from user where id = #{id} for update
</select>
这样在执行这个查询语句的时候,会对查询结果加上排他锁,其他事务在尝试修改这条记录的时候会被阻塞,直到当前事务释放锁。