• 递归查询


    参考资料: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当做父类来查询,遍历所有子类,调用自身递归的方法,如果没有会自动停止递归。最后把子类放进用主键查询的对象里返回。

  • 相关阅读:
    html float
    HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
    FLEX 如何跳出警告对话框 Alert
    点击超链接,不改变滚动条位置
    HTML DOM CSS position的用法
    FLEX 动态添加事件
    html display
    php和swf通信
    html css float left与 float right的使用说明
    如何去除FLEX LINECHART 线条阴影
  • 原文地址:https://www.cnblogs.com/chenshuyong/p/10113385.html
Copyright © 2020-2023  润新知