树状结构查询方式:无需连续访问数据库

本文介绍了一种使用Java实现的商城商品分类结构查询方法,通过递归遍历数据库中所有商品分类,构建出树形结构的分类列表。此方法首先从数据库获取所有有效分类,然后按父ID分组,最后调用递归方法创建带有子菜单的分类列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
2:如上图的结构 查询如下:

public List<CategoryListVO> getCategoryListVO(){
        List<MallCategory> mallCategories = mallCategoryMapper.selectList(new QueryWrapper<MallCategory>().lambda().eq(MallCategory::getInvalid,0));
        Map<Long,List<MallCategory>> map = new HashMap<>();
        if(mallCategories==null||mallCategories.size()<1){
            return null;
        }
        for (MallCategory mallCategory:mallCategories) {
            if(!map.containsKey(mallCategory.getParentId())){
                List<MallCategory> list = new ArrayList<>();
                list.add(mallCategory);
                map.put(mallCategory.getParentId(),list);
            }else{
                map.get(mallCategory.getParentId()).add(mallCategory);
            }
        }
        return createChildMenu(0l, map);
    }

    private List<CategoryListVO> createChildMenu(Long pid, Map<Long, List<MallCategory>> map) {
        if(!map.containsKey(pid)){
            return null;
        }
        List<MallCategory> list = map.get(pid);
        Collections.sort(list,(a, b)->(a.getSort() - b.getSort()));
        //输出
        List<CategoryListVO> allCategory = new ArrayList<>();
        for(MallCategory m : list){
            CategoryListVO categoryListVO = new CategoryListVO();
            categoryListVO.setId(m.getId());
            categoryListVO.setName(m.getName());
            categoryListVO.setParentId(m.getParentId());
            allCategory .add(categoryListVO);
            List<CategoryListVO> ll = createChildMenu(m.getId(),map);
            if(!CollectionUtils.isEmpty(ll)) {
                categoryListVO.setChildren(ll);
            }
        }
        return allCategory;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值