一种组织树后台封装实现思路

一、背景:

人员挂在叶子节点上,有专门的关系表存储这种关系。
每个节点有字段存储其所有能完整回溯到根节点的沿途所有节点的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个问题不大)。

学习使我充实,分享给我快乐!
原文地址:https://www.cnblogs.com/JaxYoun/p/13774001.html