项目系统中左侧导航或者目录一般都是用Tree结构。用户理论上可以无限深地创建数据。在遍历一个树节点下面的所有子节点数据时,以前最常见的做法就是遍历,数据量大的情况下性能也是问题。现在是通过什么方式遍历树菜单呢?请客官往下看!
单词语法
Grammar
Tree
英 [triː] 美 [triː]
n.树;树木;乔木
vt.把…赶上树;使处于困境;
第三人称单数 | trees |
现在分词 | treeing |
过去式 | treed |
过去分词 | treed |
复数 | trees |
经典例句
There is an apple tree in my yard. |
在我的院子里有一颗苹果树。 |
编程语法
Java
需求:
需求一:从父节点找子节点。系统左侧是能耗(Energy)的树菜单,右侧是能耗对应的设备(Equipment)能耗值列表。目前需要提供能耗统计功能。可以根据能耗的任意一个节点,统计当前节点下的所有能耗总和。
需求二:从子节点找父节点。系统左侧是区域(Location)的树菜单,右侧是区域对应的设备(Equipment)列表。目前需要提供导出设备列表功能。需要把设备所在的区域位置也导出来。
分析:
用递归的方法遍历每个节点是比较原始的做法。现在比较常用的方法是在数据表中添加辅助字段,再通过辅助字段进行模糊查询。
解决:
第一步:Tree的树菜单添加辅助字段code。其生成规则是父节点的code拼上子节点的code。而这个code的值便是树菜单的id。
第二步:从父节点找子节点。只需要将当前树节点的id作为模糊查询条件(%id%),便可以查到当前节点下的所有子节点。一条SQL语句解决了一堆递归查询。
第三步:从子节点找父节点。只需要找到当前设备关联的区域数据。再将区域的code做字符串分隔,获取其父节点id,最后通过id获取对应树实体数据。
往期精彩
previous
英语| 122期 Space空格
英语| 121期 Memory内存
英语| 120期 Variable变量
英语| 119期 Parameter参数
英语| 118期 Index 索引
英语| 117期 Divide 分开