商品分类三级分类高效做法(map集合存储数据再处理)

Service层代码展示

package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.ItemCatMapper;
import com.jt.pojo.Item;
import com.jt.pojo.ItemCat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class ItemCatServiceImpl implements ItemCatService {
    @Autowired
    private ItemCatMapper itemCatMapper;
    //查询商品分类
    public Map<Integer,List<ItemCat>> initMap(){
        List<ItemCat> itemCatslist = itemCatMapper.selectList(null);
        Map<Integer, List<ItemCat>> map = new HashMap<>();
        for (ItemCat itemCat : itemCatslist) {
            Integer key = itemCat.getParentId();
            if(map.containsKey(key)){
                List<ItemCat> list = map.get(key);
                list.add(itemCat);
            }else {
                ArrayList<ItemCat> list = new ArrayList<>();
                list.add(itemCat);
                map.put(key,list);
            }
        }
        return map;
    }
    @Override
    public List<ItemCat> findItemCatList(Integer level) {
//            long t1=System.currentTimeMillis();
//            QueryWrapper<ItemCat> qw = new QueryWrapper<>();
//            qw.eq("level", 1);
//            List<ItemCat> itemCatslist1 = itemCatMapper.selectList(qw);
//            if(level>1) {
//                for (ItemCat itemCatone : itemCatslist1) {
//                    qw.clear();
//                    qw.eq("parent_id", itemCatone.getId());
//                    List<ItemCat> itemCatslist2 = itemCatMapper.selectList(qw);
//                    itemCatone.setChildren(itemCatslist2);
//                    if (level > 2) {
//                        for (ItemCat itemCattwo : itemCatslist2) {
//                            qw.clear();
//                            qw.eq("parent_id", itemCattwo.getId());
//                            List<ItemCat> itemCatslist3 = itemCatMapper.selectList(qw);
//                            itemCattwo.setChildren(itemCatslist3);
//                        }
//                    }
//                }
//            }
//        long t2=System.currentTimeMillis();


        //因为上方方法查询数据库次数较多,效率低
        //优化后的方法
        /**
         * level 1只查询以及商品分类
         *       2查询一级/耳机 嵌套封装
         *       3查询一级/耳机/三级 嵌套封装
         */
        long t1 = System.currentTimeMillis();
        Map<Integer, List<ItemCat>> map = initMap();
        if(level==1){
            List<ItemCat> list = map.get(0);
            return list;
        }
        if (level==2){
            List<ItemCat> list = getlevel2List(map);
            return list;
        }
        List<ItemCat> list = getlevel3List(map);
        long t2 = System.currentTimeMillis();
        System.out.println(t2-t1);
        return list;


    }

    //查询一级和二级信息
    private List<ItemCat> getlevel2List(Map<Integer,List<ItemCat>> map) {
        List<ItemCat> onelist = map.get(0);
        for (ItemCat oneitemCat : onelist) {
            List<ItemCat> list2 = map.get(oneitemCat.getId());
            oneitemCat.setChildren(list2);
        }
        return onelist;
    }
    //查询一级和二级和三级信息
    private List<ItemCat> getlevel3List(Map<Integer, List<ItemCat>> map) {
        List<ItemCat> onelist = getlevel2List(map);
        for (ItemCat itemCat : onelist) {
            List<ItemCat> children = itemCat.getChildren();
            if (children==null ||children.size()==0){
                continue;
            }
            for (ItemCat child : children) {
                List<ItemCat> list = map.get(child.getId());
                child.setChildren(list);
            }
        }
        return onelist;
    }

    //修改商品分类状态
    @Override
    @Transactional
    public Integer updaStatus(ItemCat itemCat) {

        return itemCatMapper.updateById(itemCat);
    }
    //新增商品分类
    @Override
    @Transactional
    public Integer addItemCat(ItemCat itemCat) {
        itemCat.setStatus(true);
        return itemCatMapper.insert(itemCat);
    }
    //商品分类信息修改
    @Override
    @Transactional
    public Integer updateItemCat(ItemCat itemCat) {

        return itemCatMapper.updateById(itemCat);
    }
    //商品分类删除(当删除节点为父级时,应该删除自身和所有的子节点)
    @Override
    @Transactional
    public Integer deleteItemCat(Integer id,Integer level) {
        QueryWrapper<ItemCat> qw = new QueryWrapper<>();
        int sum=0;
        if (level==3){
            int delete = itemCatMapper.deleteById(id);
            return delete;
        }
        if (level==2){
            qw.eq("parent_id", id);
            int delete = itemCatMapper.delete(qw);
            int i = itemCatMapper.deleteById(id);
            return delete+i;
        }

        ArrayList<Integer> it1 = new ArrayList<>();
        ArrayList<Integer> it = new ArrayList<>();
        qw.eq("parent_id", id);
            List<ItemCat> list = itemCatMapper.selectList(qw);
            for (ItemCat itemCat : list) {
                it.add(itemCat.getId());
                it1.add(itemCat.getId());
            }
            qw.clear();
            qw.in("parent_id", it);
            itemCatMapper.delete(qw);
            it1.add(id);
            int i = itemCatMapper.deleteBatchIds(it);
            return sum+i;
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值