该代码是一个树形菜单的查询方法。使用递归的方式,从一级菜单开始,查询子菜单并将其放入列表中,直到没有子菜单为止。最终返回的结果是一个包含所有菜单的列表,每个菜单以Map的形式表示。
主要流程如下:
调用selectByPid(0)方法查询出所有的一级菜单,结果保存在treeMenu列表中。
创建一个空列表list用于保存最终的结果。
如果treeMenu列表中有菜单,进入循环。
遍历treeMenu列表中的菜单,对于每个菜单执行以下操作:
a. 创建一个新的LinkedHashMap用于保存菜单信息。
b. 将菜单的id和name存入map中。
c. 调用getChildren方法查询当前菜单的子菜单,并将子菜单列表添加到map中的children属性中。
d. 将map添加到list列表中。
返回列表list作为最终结果。
getChildren方法与tree方法类似,它接收一个id参数代表父菜单的id,然后查询该父菜单的子菜单,并以相同的方式进行处理。最终返回的是一个当前菜单的子菜单列表。
整个过程通过递归实现,可以无限层次地获取菜单及其子菜单的关系
public List<Map<String, Object>> tree() {
//查询出所有的一级菜单[pid=0为一级菜单]
List<Menu> treeMenu = menuServiceImpl.selectByPid(0);
List<Map<String, Object>> list = new ArrayList<>();
if (treeMenu.size() > 0) {
for (Menu menu : treeMenu) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("id", menu.getId());
map.put("name", menu.getName());
map.put("children", getChildren(menu.getId()));
list.add(map);
}
}
return list;
}
/**
* 递归
*
* @param id
* @return
*/
public List<Object> getChildren(Integer id) {
List<Object> list = new ArrayList<>();
List<Menu> treeMenu = menuServiceImpl.selectByPid(id);
for (Menu menu : treeMenu) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("id", menu.getId());
map.put("name", menu.getName());
map.put("children", getChildren(menu.getId()));
list.add(map);
}
return list;
}