在 MyBatis 中,實現外鍵的級聯操作需要在映射文件(mapper.xml)中編寫相應的 SQL 語句。以下是一個簡單的例子,展示了如何在 MyBatis 中設置外鍵級聯操作。
假設我們有兩個表:user
和 order
,其中 order
表有一個外鍵 user_id
指向 user
表的主鍵。我們希望在刪除用戶時,同時刪除該用戶的所有訂單。
首先,在 UserMapper.xml
文件中編寫刪除用戶的 SQL 語句:
<mapper namespace="com.example.mapper.UserMapper">
<!-- 刪除用戶 -->
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{userId}
</delete>
</mapper>
接下來,在 OrderMapper.xml
文件中編寫刪除訂單的 SQL 語句:
<mapper namespace="com.example.mapper.OrderMapper">
<!-- 刪除訂單 -->
<delete id="deleteOrdersByUserId" parameterType="int">
DELETE FROM order WHERE user_id = #{userId}
</delete>
</mapper>
然后,在 UserService
類中實現級聯刪除操作:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private OrderMapper orderMapper;
@Transactional
public void deleteUserCascade(int userId) {
// 先刪除用戶的訂單
orderMapper.deleteOrdersByUserId(userId);
// 再刪除用戶
userMapper.deleteUser(userId);
}
}
在這個例子中,我們使用了 Spring 的 @Transactional
注解來確保級聯刪除操作的原子性。當刪除用戶的訂單和刪除用戶這兩個操作都成功執行時,事務才會提交;否則,事務將回滾,保證數據的一致性。