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个问题不大)。

    学习使我充实,分享给我快乐!
  • 相关阅读:
    hutool 解析 Excel
    上传文件
    Cannot construct instance of `com.**` (although at least one Creator exists)
    Java8之Optional
    java8之Stream
    java8之Lambda
    springboot+mybatis事务管理
    queryWrapper in like
    Java 组装 Tree
    JWT
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/13774001.html
Copyright © 2011-2022 走看看