在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>
這樣在執行這個查詢語句的時候,會對查詢結果加上排他鎖,其他事務在嘗試修改這條記錄的時候會被阻塞,直到當前事務釋放鎖。