java递归查询

递归建立数据库的字段要建立pid
既pid是父id
在这里插入图片描述
这里的pid要能在id找到 找到就说明当前id的组织是父组织 如果找不到就说明的顶级id 图中的主菜单1就是顶级组织

  public Menu getMenuTree() {
        //先查询顶级目录
        LambdaQueryWrapper<Menu> menuLambdaQueryWrapper = new LambdaQueryWrapper<>();
        menuLambdaQueryWrapper.eq(Menu::getPid, "0");
        Menu menusBase = menuMapper.selectOne(menuLambdaQueryWrapper);
        //查询除了顶级组织以外的组织
        LambdaQueryWrapper<Menu> menuLambdaQueryWrapper2 = new LambdaQueryWrapper<>();
        menuLambdaQueryWrapper2.ne(Menu::getPid, "0");
        List<Menu> menuLNotBase = menuMapper.selectList(menuLambdaQueryWrapper2);
        List<Menu> menus = iterateMenus(menuLNotBase, menusBase.getId());
        menusBase.setMenuChildren(menus);
        return menusBase;
    }

反复调用iterateMenus方法 直到循环遍历结束

    /**
     * 多级组织查询方法
     *
     * @param menuVoList 不包含最高层次组织的组织集合
     * @param pid        父类id
     * @return
     */
    public List<Menu> iterateMenus(List<Menu> menuVoList, String pid) {
        List<Menu> result = new ArrayList<>();
        int a =0;
        for (Menu menu : menuVoList) {
            //获取菜单的id
            String menuid = menu.getId();
            //获取菜单的父id
            String parentid = menu.getPid();

                if (parentid.equals(pid)) {
                    //递归查询当前子菜单的子菜单
                    List<Menu> iterateMenu = iterateMenus(menuVoList, menuid);
                    menu.setMenuChildren(iterateMenu);
                    result.add(menu);
                }
        }
        return result;
    }

Entity有些字段不需要 我加是因为自己的业务

@Data
@NoArgsConstructor
@TableName("Menu")
public class Menu {

    private String  id;
    private String name;
    private String pid;
    @TableField(exist = false)
    private List<Menu> menuChildren;
    @TableField(exist = false)
    private Boolean nextRank;
}
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值