在 MyBatis 中,实现外键的级联操作需要在映射文件(mapper.xml)中编写相应的 SQL 语句。以下是一个简单的例子,展示了如何在 MyBatis 中设置外键级联操作。
假设我们有两个表:user
和 order
,其中 order
表有一个外键 user_id
指向 user
表的主键。我们希望在删除用户时,同时删除该用户的所有订单。
首先,在 UserMapper.xml
文件中编写删除用户的 SQL 语句:
DELETE FROM user WHERE id = #{userId}
接下来,在 OrderMapper.xml
文件中编写删除订单的 SQL 语句:
DELETE FROM order WHERE user_id = #{userId}
然后,在 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
注解来确保级联删除操作的原子性。当删除用户的订单和删除用户这两个操作都成功执行时,事务才会提交;否则,事务将回滚,保证数据的一致性。