递归删除树结构(资源树)

上一篇写到了递归进行查询,获取树结构
这一篇写递归删除,删除系统级别目录同时也把所有的子集,包括子集的子集也要删除掉

点击删除测试目录1的删除按钮,需要把下面的菜单以及按钮都删除,点击菜单的删除,需要把按钮也给删除掉
在这里插入图片描述

实现过程

  1. controller层

	@Autowired
    private TestTreeService testTreeService;

//    递归进行删除
    @GetMapping("/delTree")
    public String tesDelTree(Integer id){
        return testTreeService.tesDelTree(id);
    }

  1. 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>

完成基本就是以上步骤, 递归这玩意 真的是一看就会,一写就废,如果有错误希望大家不吝赐教,同时也希望可以帮到大家,祝你成功哦 !

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值