递归查询菜单树

最近写了个菜单树,用到递归,其实没啥难度,就是捋清思路就行,在此做下简单记录下:

第一步:创建实体类

@Data
public class MenuTreeDto {
    private String menuId;
    private String menuName;
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private List<MenuTreeDto> childrenMenu;
}

简单实体类(由于结果中会出现子节点没有的情况,此时子节点会返回null,加上注解-对象为空时不序列化即可)

第二步:编写mapper等此处忽略

第三步:递归方法编写

    private List<MenuTreeDto> getChildren(MenuTreeDto menuTreeDto) {
  
        //根据父节点查询子节点
        List<MenuTreeDto> poticeMenus = menuMapper.selectDto(menuTreeDto.getMenuId());
        //子节点没有时,跳出递归(一定要有判断)
        if (poticeMenus.size() > 0) {
            MenuTreeDto dto = new MenuTreeDto();
            for (int i = 0; i < poticeMenus.size(); i++) {
                //封装子节点信息
                dto.setMenuId(poticeMenus.get(i).getMenuId());
                dto.setMenuName(poticeMenus.get(i).getMenuName());
                List<MenuTreeDto> children = getChildren(dto);
                if (children.size() > 0) {
                    //将查到的子节点封装
                    poticeMenus.get(i).setChildrenMenu(children);
                }
            }
        }
        return poticeMenus;
    }

返回结果:


 "data": [
        {
            "menuId": "06637afcb8034ed9a551d4665e0cc998",
            "menuName": "文件夹B"
        },
        {
            "menuId": "a7663374d0254eb5860c49267abb753d",
            "menuName": "文件夹A",
            "childrenMenu": [
                {
                    "menuId": "03f3861c69a24ecb9b3b58fd869f987f",
                    "menuName": "文件夹Ac"
                },
                {
                    "menuId": "8e902704f18c4b1e974701547246a4ac",
                    "menuName": "文件夹Ab"
                },
                {
                    "menuId": "c09289e31bef44bb9030e1bacddc3131",
                    "menuName": "文件夹Aa",
                    "childrenMenu": [
                        {
                            "menuId": "49cb6fe73a5c40fdb467fd1f2573477c",
                            "menuName": "文件夹Aaa"
                        },
                        {
                            "menuId": "cae7917181164a8da6c79cef33b2d1ed",
                            "menuName": "文件夹Aab"
                        }
                    ]
                }
            ]
        },
        {
            "menuId": "b43d93ed18464da288b7e6c539703a58",
            "menuName": "文件夹C"
        }
    ]

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值