zoukankan      html  css  js  c++  java
  • 一种组织树后台封装实现思路

    一、背景:

    人员挂在叶子节点上,有专门的关系表存储这种关系。
    每个节点有字段存储其所有能完整回溯到根节点的沿途所有节点的id数组,且另有字段存储其直接父节点的id。
    根节点的id为0。
    现需要通过人员查询其对应的组织,并且将组织以完整的树结构展示给前台。
    前台不使用z-tree等插件,直接原样展示后台树结构。

    二、后台封装树的实现步骤:

    1.通过用户id关联关系表,查出其下所有叶子节点。
    2.取出叶子节点的上级节点id数组,经过切分、去重,得到所有非叶子节点的id,形成下一步查询IN条件的内容列表。
    3.用IN条件执行查询,获取所有上级节点。
    4.遍历初始化所有上级节点的children列表对象(就是给节点对象初始化赋值一个ArrayList对象)。
    5.将所有上级节点封装为Map<id, node>映射。
    6.合并叶子节点和上层节点列表,形成大列表。
    7.遍历大列表,利用每个节点的直接父id,根据映射关系,将大列表中的元素添加到其父节点的children列表中。
    8.过滤上层节点列表,仅返回父id为0的节点。
    

    三、分析:

    优点:避免了效率低的递归,取而代之的是更高效的遍历。第二次查询直接通过主键效率最高。实现思路简单,无复杂的数据结构方便维护。
    缺点:当数据量特别大时,IN条件列表会很长,效率可能衰减(不超过1000个问题不大)。

    学习使我充实,分享给我快乐!
  • 相关阅读:
    五层原理体系结构的简单分析
    Simple Factory 简单工厂模式(静态工厂)
    css一个图片包含多个图片|网站侧栏导航
    百度地图、高德地图的数据从哪里得到的?
    浏览器开发
    开发一款浏览器内核需要学习哪些方面的知识?
    使用PowerDesigner进行数据库建模入门
    How to create a search engine
    合并两个有序数组
    STL中的algorithm
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/13774001.html
Copyright © 2011-2022 走看看