多级菜单查询

摘要:
要求1:这不需要传输任何参数。1.父ID为0的数据库中存储的菜单节点是根节点,即主菜单。后续子菜单的父ID是父菜单的ID。findChilds;//添加到根节点的根列表Add;}}returnrootlist;}Privatevoid findChildren{List<MenuDTO>childlist=newArrayList<>();//遍历所有数据,找到父节点的子节点的数据,并将其添加到childlist集合中。for{ifchildlist.add;}//如果子节点不存在,则无需遍历子节点中的子节点并直接返回。如果返回;//设置父节点的子节点列表根。setChildren//如果存在子节点,则递归调用该方法以查找子节点的子节点。

需求一:这种不需要传任何参数

一、数据库存储的菜单结

多级菜单查询第1张

parentid为0的都是根节点,也就是一级菜单,后面的子菜单的parentid为父菜单的ID。

二、MenuDTO类(菜单类)的结构:

@Date
public class MenuDTO {

    private Integer id;

    private String content;

    private Integer parentid;

    private Date createtime;

    private Integer num;

    private List<MenuDTO> childs;

  

三、业务层:采用递归方法,遍历成树级结构菜单

//获得树级结构菜单
 public List<MenuDTO> getMenuList() throws IOException {
        //拿到菜单的所有数据
        List<MenudTO> list=menuMapper.getMenuList();
        //存储根节点的菜单,即一级菜单
        List<MenuDTO> rootlist=new ArrayList<>();
        //遍历所有数据,找到根节点菜单
        for (MenuDTO menuDTO:
             list) {
            if(menuDTO.getParentid().equals(0)){
                //找到根节点菜单的时候,寻找这个根节点菜单下的子节点菜单。
                findChilds(menuDTO,list);
                //添加到根节点的列表中
                rootlist.add(menuDTO);
            }
        }
        return rootlist;
    }

    private void findChilds(MenuDTO root,List<MenuDTO> list){
        List<MenuDTO> childlist=new ArrayList<>();
        //遍历所有数据,找到是入参父节点的子节点的数据,然后加到childlist集合中。
        for (MenuDTO menu :
                list) {
            if (root.getId().equals(menu.getParentid()))
                childlist.add(menu);
        }
        //若子节点不存在,那么就不必再遍历子节点中的子节点了 直接返回。
        if(childlist.size()==0)
            return;
        //设置父节点的子节点列表
        root.setChilds(childlist);
        //若子节点存在,接着递归调用该方法,寻找子节点的子节点。
        for (MenuDTO childs :
                childlist) {
            findChilds(childs, list);
        }
    }

  

需求二:这种需要传任何参数,可以传多个

一、分类实体类

public class ChildNodeCategoryDto {

    /**
     * 分类ID
     */
    private Integer catId;

    /**
     * 分类父ID
     */
    private Integer parentId;

    /**
     * 分类名称
     */
    private String catName;
    
    /**
     * 分类级别
     */
    private String catLevel;
    
    /**
     * 分类缩略图
     */
    private String catThumb;
    
    /**
     * 子分类列表
     */
    List<ChildNodeCategoryDto> childCategory = new ArrayList<ChildNodeCategoryDto>();

  

二、业务层:采用递归方法,遍历成树级结构分类

public List<ChildNodeCategoryDto> getGoodsCategory(String ids) {
        
        List<ChildNodeCategoryDto> list = new ArrayList<ChildNodeCategoryDto>();
        GoodsCategoryDto dto = new GoodsCategoryDto();
        //查询所有的分类
        dto.setPlatformCode("0001");
        dto.setIsShow(1);
        List<EcsCategory> ecsCategoryList = ecsCategoryMapper.findAllByShowAndPlatformCodeOrderBySortOrder(dto);
        for (EcsCategory ecsCategory : ecsCategoryList) {
            ChildNodeCategoryDto childNodeCategory = new ChildNodeCategoryDto();
            childNodeCategory.setCatId(ecsCategory.getCatId());
            childNodeCategory.setParentId(ecsCategory.getParentId());
            childNodeCategory.setCatName(ecsCategory.getCatName());
            childNodeCategory.setCatLevel(ecsCategory.getCatCode());
            childNodeCategory.setCatThumb(ecsCategory.getCatThumb());
            list.add(childNodeCategory);
        }
        
        //查询根节点数据
        List<ChildNodeCategoryDto> rootLists = new ArrayList<ChildNodeCategoryDto>();        
   
        String[] strArray = ids.split(",");
        for(int i = 0; i<strArray.length ;i++) {
            Integer catId = Integer.parseInt(strArray[i]);
             //先找到所有的一级菜单
             for (ChildNodeCategoryDto childNodeCategoryResponse : list) {
                  if (childNodeCategoryResponse.getCatId().equals(catId)) {
                        rootLists.add(childNodeCategoryResponse);
                        getChild(childNodeCategoryResponse, list);
                    }
                }
            }
        
        }
        return rootLists;

  

private void getChild(ChildNodeCategoryDto category, List<ChildNodeCategoryDto> list) {
        // 存放子菜单的集合
        List<ChildNodeCategoryDto> childList = new ArrayList<ChildNodeCategoryDto>();
        category.setChildCategory(childList);
        for (ChildNodeCategoryDto childNodeCategoryResponse : list) {
            if (childNodeCategoryResponse.getParentId().equals(category.getCatId())) {
                childList.add(childNodeCategoryResponse);
                getChild(childNodeCategoryResponse, list);
            }
        }
    }

  

免责声明:文章转载自《多级菜单查询》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OpenMP并行编程应用—加速OpenCV图像拼接算法freemarker常见语法大全下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java中集合总结

Java数组的长度是固定的,为了使程序能够方便地存储和操作数目不固定的一组数据,JDK类库提供了Java集合,这些集合类都位于java.util包中,但是与数组不同的是,集合中不能存放基本类型数据,而只能存放对象的引用。 Java集合主要分为以下三种类型: Set(集):集合中的对象不按特定方式排序,且没有重复对象。它的有些实现类能对集合中的对象按照特地方...

02_编程规约——集合处理

1.【强制】关于hashCode和equals的处理,必须遵循如下规则 1.1 只要重写equals,就必须重写hashCode。 1.2 因为Set存储的是不重复对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法。 1.3 如果自定义对象为Map的键,那么必须重写hashCode和equals。 说明:String重...

spider爬虫练习,爬取顶点小说网,小说内容。

------------恢复内容开始------------ 我这里练习爬虫的网站是顶点小说网,地址如下: https://www.booktxt.net/ 我这里以爬取顶点小说网里面的凡人修仙传为例子: 首先观察界面: 第一章: 第二章: 由上面可得出规律,每点一次下一章,url后面的数字就会自动加1。 爬虫主要分为3步: 第一步:构建url列表...

爬虫实战(一) 用Python爬取百度百科

最近博主遇到这样一个需求:当用户输入一个词语时,返回这个词语的解释 我的第一个想法是做一个数据库,把常用的词语和词语的解释放到数据库里面,当用户查询时直接读取数据库结果 但是自己又没有心思做这样一个数据库,于是就想到了百度百科这么一个现成的 “数据库” 下面我们就通过 urllib 和 xpath 来获取百度百科的内容 1、爬取百度百科 百度百科是一个静态...

matlab 中如何创建以及获取popupmenu的值

1.如何创建popupmenu的值 如图,点击河南左边的符号,会弹出右边的小窗口,输入完一项之后点击enter继续创建第二项即可。 2.如何获取popupmenu的值 functionpopupmenu_Callback(hObject, eventdata, handles) val = get(handles.popupmenu,'value...

ClosedXML导出Excel简单使用

c#经常会用到导出excel。 ClosedXML是一个.NET库,用于读取,操作和写入Excel 2007+(.xlsx,.xlsm)文件。它旨在提供一个直观且用户友好的interface来处理基础的OpenXML API。 ClosedXML许可证是MIT。 示例: using ClosedXML.Excel; using DoExcel.Models...