上一篇写到了递归进行查询,获取树结构
这一篇写递归删除,删除系统级别目录同时也把所有的子集,包括子集的子集也要删除掉
点击删除测试目录1的删除按钮,需要把下面的菜单以及按钮都删除,点击菜单的删除,需要把按钮也给删除掉
实现过程
- controller层
@Autowired
private TestTreeService testTreeService;
// 递归进行删除
@GetMapping("/delTree")
public String tesDelTree(Integer id){
return testTreeService.tesDelTree(id);
}
- service层
@Autowired
private TestTreeDao testTreeDao;
@Override
public String tesDelTree(Integer id) {
//创建一个集合 用于存储查询出来的id以及自己id
ArrayList<Integer> ids = new ArrayList<>();
ids.add(id);
//递归的将一级分类下的id也加入到集合中
this.getIds(ids,id);
try {
//进行删除
testTreeDao.deleChilden(ids);
return "删除成功!";
}catch (Exception e){
e.printStackTrace();
return "删除失败";
}"删除失败";
}
}
private void getIds(ArrayList<Integer> ids, int oneId) {
//查询二级分类的对象
List<RoleInfoVo> chilendList = testTreeDao.selectChilden(oneId);
//遍历二级分类的对象,把二级分类的id加入到要删除的集合中
for (RoleInfoVo roleInfoVo : chilendList) {
Integer id = roleInfoVo.getId();
ids.add(id);
this.getIds(ids, id);
}
}
3.dao层
//查询子集id
List<RoleInfoVo> selectChilden(Integer id);
<select id="selectChilden" resultType="com.test.ssm.Vo.RoleInfoVo">
select id from t_permission where pid = #{id}
</select>
//对查询出来的id进行删除
Integer deleChilden(@Param("ids") ArrayList<Integer> ids);
<delete id="deleChilden">
delete from t_permission where id in
<foreach collection="ids" item="perId" separator="," open="(" close=")">
#{perId}
</foreach>
</delete>
完成基本就是以上步骤, 递归这玩意 真的是一看就会,一写就废,如果有错误希望大家不吝赐教,同时也希望可以帮到大家,祝你成功哦 !