三级目录的查询

1.数据库表的格式:

2.ItemCat的pojo对象

@Data
@Accessors(chain = true)
@TableName("item_cat")
public class ItemCat extends BasePojo{
    @TableId(type = IdType.AUTO)  //自增
    private Integer id;         //定义主键

    private Integer parentId;   //定义父级菜单 开启驼峰规则映射
    private String name;        //分类名称
    private Boolean status;     //分类状态 0 停用 1 正常
    private Integer level;      //商品分类等级  1 2 3
    @TableField(exist = false)
    private List<ItemCat> children; //是业务数据 不是数据库字段
}

3.业务层代码

 @Override
    public List<ItemCat> findItemcatlist(Integer level) {
        QueryWrapper<ItemCat> itemCatQueryWrapper = new QueryWrapper<>();
        itemCatQueryWrapper.eq("parent_id", 0);
        List<ItemCat> OneList = itemcatMapper.selectList(itemCatQueryWrapper);
        for(ItemCat OneItemCat : OneList){
            //条件清空
            itemCatQueryWrapper.clear();
            //二级目录的父ID是一级目录的ID
            itemCatQueryWrapper.eq("parent_id", OneItemCat.getId());
            List<ItemCat> TwoList = itemcatMapper.selectList(itemCatQueryWrapper);
            for(ItemCat TwoItemCat : TwoList){
                //条件清空
                itemCatQueryWrapper.clear();
                 //三级目录的父ID是二级目录的id
                itemCatQueryWrapper.eq("parent_id", TwoItemCat.getId());
                List<ItemCat> ThreeList = itemcatMapper.selectList(itemCatQueryWrapper);
                
                TwoItemCat.setChildren(ThreeList);
            }
            OneItemCat.setChildren(TwoList);
        }
        return OneList;
    }

4.业务层代码优化

 //封装到map中
    public Map<Integer,List<ItemCat>> getMap(){
        //1.获取数据库中所有的数据
        List<ItemCat> itemCatlist = itemcatMapper.selectList(null);
        //2.将list集合数据封装到map集合中
        Map<Integer,List<ItemCat>> map = new HashMap<>();
        for(ItemCat itemCat : itemCatlist){
            int parentid = itemCat.getParentId();
            //判断map中是否已经有0或者1或者2
            if(map.containsKey(parentid)){  //代表存在
                map.get(parentid).add(itemCat);
            }else {  //代表不存在
                List<ItemCat> temp = new ArrayList<>();
                temp.add(itemCat);
                map.put(parentid, temp);

            }
        }
        return map;
    }
    //获取二级目录
    public List<ItemCat> getTwoList(Map<Integer,List<ItemCat>> map){
        //1.获取一级目录
        List<ItemCat> Onelist = map.get(0);
        //2.遍历一级目录封装二级目录
        for(ItemCat itemCat:Onelist){
            //获取一级目录的id作为子集的父id
            int parentid = itemCat.getId();
            List<ItemCat> Twolist = map.get(parentid);
            itemCat.setChildren(Twolist);
        }
        return Onelist;
    }
    //获取三级目录
    private List<ItemCat> getThreeList(Map<Integer, List<ItemCat>> map) {
        //1.获取一级和二级目录
        List<ItemCat> OneList = getTwoList(map);
        for(ItemCat OneItem:OneList){
            //2.获取二级目录
            List<ItemCat> twoList = OneItem.getChildren();
            //判断二级目录是否存在空值null
            if(twoList == null){
                continue;
            }
            for(ItemCat twoItemcat: twoList){
                //获取二级的id作为三级的父id
                int parentid = twoItemcat.getId();
                //获取集合封装到二级的children
                List<ItemCat> threeList = map.get(parentid);
                twoItemcat.setChildren(threeList);
            }
        }
        return OneList;
    }

    @Override
    public List<ItemCat> findItemcatlist(Integer level) {
        Map<Integer,List<ItemCat>> map = getMap();
        if(level==1){
            return map.get(1);
        }
        if(level==2){
            return getTwoList(map);
        }
        return getThreeList(map);
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值