多级菜单树

/**
 * @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": [ ]
    }
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值