mybatis级联删除
时间: 2023-11-07 18:18:11 浏览: 131
存储过程-游标-级联删除
4星 · 用户满意度95%
MyBatis中的级联删除可以通过配置多对多关系来实现。下面是一个简单的示例:
首先,创建两个实体类:User和Role。
```java
public class User {
private int id;
private String username;
private List<Role> roles;
// 省略其他属性和方法
}
public class Role {
private int id;
private String roleName;
// 省略其他属性和方法
}
```
接下来,创建对应的Mapper接口和XML文件。
UserMapper.java:
```java
public interface UserMapper {
User getUserById(int id);
void deleteUserById(int id);
}
```
UserMapper.xml:
```xml
<mapper namespace="com.example.mapper.UserMapper">
<resultMap id="userResultMap" type="User">
<id property="id" column="id" />
<result property="username" column="username" />
<collection property="roles" ofType="Role">
<id property="id" column="role_id" />
<result property="roleName" column="role_name" />
</collection>
</resultMap>
<select id="getUserById" resultMap="userResultMap">
SELECT u.id, u.username, r.id AS role_id, r.role_name
FROM user u
LEFT JOIN user_role ur ON u.id = ur.user_id
LEFT JOIN role r ON ur.role_id = r.id
WHERE u.id = #{id}
</select>
<delete id="deleteUserById">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
```
在这个示例中,通过resultMap配置了User和Role的关联关系。在删除用户时,如果配置了级联删除,那么与该用户关联的角色也会被删除。
使用时,可以在Service层调用Mapper接口中的deleteUserById方法来实现级联删除。
```java
@Autowired
private UserMapper userMapper;
public void deleteUserById(int id) {
userMapper.deleteUserById(id);
}
```
这样,当调用deleteUserById方法删除某个用户时,与该用户关联的角色也会被删除。
阅读全文