/**
* @Description:多级菜单树
* @Author nanyi
* @Date 2021/4/25 12:37
**/
@RestController
@RequestMapping("menu")
public class MenuController {
@Autowired
private MenuMapper menuMapper;
@GetMapping("/getMenu")
public List<Menu> getMenuTree() {
List<Menu> menuBase = menuMapper.selectByPid(0);
List<Menu> menusNotBase = menuMapper.selectAllNotBase();
for (Menu menu : menuBase) {
List<Menu> menus = iterateMenus(menusNotBase, menu.getId());
menu.setMenuChildren(menus);
}
return menuBase;
}
/**
* 多级菜单查询方法
*
* @param menuVoList 不包含最高层次菜单的菜单集合
* @param pid 父类id
* @return
*/
public List<Menu> iterateMenus(List<Menu> menuVoList, int pid) {
List<Menu> menus = new ArrayList<>();
for (Menu menu : menuVoList) {
// 获取菜单id
Integer menuid = menu.getId();
// 获取菜单的父id
Integer parentid = menu.getPid();
if (null != parentid) {
if (parentid == pid) {
// 递归查询当前子菜单的子菜单
List<Menu> iterateMenu = iterateMenus(menuVoList, menuid);
menu.setMenuChildren(iterateMenu);
menus.add(menu);
}
}
}
return menus;
}
}
数据库结构
最终样式:
[
{
"id": 1,
"name": "主菜单1",
"pid": 0,
"menuChildren": [
{
"id": 4,
"name": "子菜单1.1",
"pid": 1,
"menuChildren": [
{
"id": 6,
"name": "子菜单1.1.1",
"pid": 4,
"menuChildren": [ ]
},
{
"id": 9,
"name": "子菜单1.1.2",
"pid": 4,
"menuChildren": [ ]
}
]
},
{
"id": 5,
"name": "子菜单1.2",
"pid": 1,
"menuChildren": [ ]
}
]
},
{
"id": 2,
"name": "主菜单2",
"pid": 0,
"menuChildren": [
{
"id": 7,
"name": "子菜单2.1",
"pid": 2,
"menuChildren": [ ]
},
{
"id": 8,
"name": "子菜单2.2",
"pid": 2,
"menuChildren": [ ]
}
]
},
{
"id": 3,
"name": "主菜单3",
"pid": 0,
"menuChildren": [ ]
}
]