这是一个自关联父id的表结构
最近工作中遇到一个需求,查询每一层的父路径, 这个需求非常常见,但是一直没有写过,今天记录一下
实现方式是:递归。把数据全部加载到内存中,放入map(不要放list遍历),然后去map里对比id
Map<String, Group> mapId2Group = new HashMap<String, Group>();
for (Group group : allGroups) {
mapId2Group.put(group.getId(), group);
}
private String getGroupPath(Map<String, Group> mapId2Group,String groupId){ //要查询的id
Group group =mapId2Group.get(groupId);
if(group==null){
return "";
}
return getAllPath(mapId2Group,group,0);
}
private String getAllPath(Map<String, Group> mapId2Group,Group children,int depth) {
if(depth>maxDepth){
return children.getName();
}
if (StringUtils.isNotEmpty(children.getParentId())) {
Group parentGroup = mapId2Group.get(children.getParentId());//去map中通过当前的父id查找
if(parentGroup==null){ //如果查到了则返回name
return children.getName();
}
return getAllPath(mapId2Group,parentGroup,depth+1) + "/" + children.getName(); //递归
}
return children.getName();
}