递归查询

参考资料:https://www.cnblogs.com/linjiqin/p/3148066.html

// 递归查询所有机构
    public Msg selectOrgAndChildrenById(String orgId) {
        try {
            Org orgTree = recursiveTree(orgId);//调用递归方法
            return Msg.success().add("data", orgTree);//返回查询的递归数据
        } catch (Exception e) {
            logger.error(String.format("查询异常,错误描述 [%s]", e.getMessage()));
            return Msg.fail();
        }
    }


    //递归方法
    private Org recursiveTree(String orgId) {
        Org node = orgMapper.selectByPrimaryKey(orgId);//根据传入机构id获取顶层节点
        List<Org> orgs = orgMapper.selectOrgChildrenByParentId(orgId); //把传入id当做父类id查询得出子节点
        //遍历子节点
        for (Org child :orgs) { //遍历每个子节点
            Org n = recursiveTree(child.getOrgid());//调用自身递归方法传入当前对象的id
        node.getNodes().add(n); //将查询的子节点对象封装在list集合里
        }
        return node;
    }

需要注意,对要递归的实体类里加上集合对象,就是所谓的节点。是为了将查询的子类封装进去。

   private List nodes = new ArrayList();


    public List getNodes() {
        return nodes;
    }

    public void setNodes(List nodes) {
        this.nodes = nodes;
    }

  思路:先查询得到顶级节点。就是根据传入的id进行主键查询

然后在进行子类查询!就是将传入的id当做父类来查询,遍历所有子类,调用自身递归的方法,如果没有会自动停止递归。最后把子类放进用主键查询的对象里返回。

原文地址:https://www.cnblogs.com/chenshuyong/p/10113385.html