树形表的标记字段是parentId,即父节点的id。
查询树形表的方法:
- 当层级固定时可以使用表的自连接进行查询。
- 如果想灵活查询每个层级可以使用MySQL中的递归方法,使用
with RECURESIVE实现。 - 使用代码递归的方式构建树。
- 通过HashMap,只需要遍历一次,就可以完成树的生成。比较推荐使用,参考代码如下
List<TreeNodeDTO> list = mapper.getNodeList();
ArrayList<TreeNodeDTO> rootNodes = new ArrayList<>();
Map<Integer, TreeNodeDTO> map = new HashMap<>();
for (TreeNodeDTO node : list) {
map.put(node.getId(), node);
Integer parentId = node.getParentId();
// 判断是否有父节点 (没有父节点本身就是个父菜单)
if (parentId.equals('0')){
rootNodes.add(node);
// 找出不是父级菜单的且集合中包括其父菜单ID
} else if (map.containsKey(parentId)){
map.get(parentId).getChildren().add(node);
}
}