13、【分类模块管理】——查询节点和递归查找功能开发

简介: 该接口是我们查询出所有的结点个子节点,在查询的时候利用父节点parentId属性来进行递归查询,当子节点不再有的时候,我们就结束递归查询,然后将查询到的结果全部返回给客户端。

该接口是我们查询出所有的结点个子节点,在查询的时候利用父节点parentId属性来进行递归查询,当子节点不再有的时候,我们就结束递归查询,然后将查询到的结果全部返回给客户端。关于在首先我们判断登陆者是否是管理员,我们在10、【分类模块管理】——添加分类接口开发有说明。
controller

 //查询当前节点和子节点
    @RequestMapping("get_children_category.do")
    @ResponseBody
    public ServerResponse getCategoryAndDeepChildrenCategory(HttpSession session,@RequestParam(value = "categoryId",defaultValue ="0" )Integer categoryId){
        //验证用户是否登录
        User user = (User)session.getAttribute(Const.CURRENT_USER);
        if(user==null){
            return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"用户未登录,请先登录");
        }
        //校验是否是管理员
        if(iUserService.checkAdminRole(user).isSuccess()){

            //查询当前节点的Id和递归子节点的Id
            return  iCategoryService.selectCategoryAndChildrenById(categoryId);

        }else{
            return ServerResponse.createByErrorMessage("无权限操作,需要管理员权限");
        }
    }

server:

 //递归查询查询该节点和子节点的Id
    ServerResponse selectCategoryAndChildrenById(Integer categoryId);

serverImpl:

 /**
     * 递归查询查询该节点和子节点的Id
     * @param categoryId
     * @return
     */
    public ServerResponse selectCategoryAndChildrenById(Integer categoryId){

        //调用递归算法
        Set<Category> categorySet= Sets.newHashSet();
        finChildCategory(categorySet,categoryId);


        List<Integer> categoryIdList= Lists.newArrayList();
        if(categoryId !=null){
            for(Category categoryItem : categorySet){
                categoryIdList.add(categoryItem.getId());
            }
        }
        return ServerResponse.createBySuccess(categoryIdList);
    }

    //递归算法算出子节点
    private Set<Category> finChildCategory(Set<Category> categorySet,Integer categoryId){
        Category category=categoryMapper.selectByPrimaryKey(categoryId);
        if(category !=null){
            categorySet.add(category);
        }
        //查找子节点,递归算法一定要有一个退出条件,当子节点不再有的时候,就跳出递归
        List<Category> categoryList=categoryMapper.selectCategoryChildrenByParentId(categoryId);
        for(Category categoryItem:categoryList){
            finChildCategory(categorySet,categoryItem.getId());
        }
        return categorySet;
    }

Mapper:

//    通过父结点查询同级字节点的信息
    List<Category> selectCategoryChildrenByParentId(Integer parentId);

Mapper.xml:

  <select id="selectCategoryChildrenByParentId" resultMap="BaseResultMap" parameterType="int">
  select
  <include refid="Base_Column_List"/>
    from  mmall_category
    where parent_id=#{parentId}

  </select>

接口测试:


img_db8c2cd5dc7af9cee07bc89ee30455a9.png
image.png
相关文章
|
7月前
|
算法 搜索推荐
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
62 0
|
7月前
|
存储 算法
数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)
数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)
154 0
|
8月前
|
SQL Java 关系型数据库
java 递归返回树形组织结构(附带树形菜单的搜索)
java 递归返回树形组织结构(附带树形菜单的搜索)
145 0
|
JavaScript 前端开发 数据可视化
列表封装-递归数据回显-全局数据挂载——基础积累
列表封装-递归数据回显-全局数据挂载——基础积累
110 0
|
算法
一篇文章带你整体了解算法中的基本问题《查找》
查找 本章对算法中的基本问题--查找做了一个简要介绍,包含了一些基本算法思想以及评价,后续文章详细介绍一些算法,欢迎关注本系列。 可以转载,但请声明源链接:文章源链接justin3go.com(有些latex公式某些平台不能渲染可查看这个网站)
85 0
|
关系型数据库 MySQL 索引
新增数据时,MySQL索引树的自调整过程
刚开始你一个表建好后,就一个数据页,就是聚簇索引的一部分,而且还是空的。若你插入数据,就是直接往这数据页里插入,也没必要给他弄索引页
120 0
|
存储
二叉树它上线查找功能了?
二叉树它上线查找功能了?
112 0
二叉树它上线查找功能了?
|
Rust 自然语言处理 算法
【算法】1389. 按既定顺序创建目标数组(多语言实现)
给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组: 目标数组 target 最初为空。 按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。 重复上一步,直到在 nums 和 index 中都没有要读取的元素。 请你返回目标数组。 题目保证数字插入位置总是存在。
【算法】1389. 按既定顺序创建目标数组(多语言实现)
|
C语言
实验报告 抽象数据类型的表示和实现 (三元组) 实现对三元组的基本操作 动态分配 (更新)增加菜单功能
实验报告 抽象数据类型的表示和实现 (三元组) 实现对三元组的基本操作 动态分配 (更新)增加菜单功能
518 0
实验报告 抽象数据类型的表示和实现 (三元组) 实现对三元组的基本操作 动态分配 (更新)增加菜单功能
|
SQL
【自然框架】 之 资源角色——列表过滤方案(思路篇)
名词解释 1、资源角色,我的理解就是资源过滤方案 + 角色。就是把资源过滤方案和角色结合在一起的东东。2、资源:这里的资源指的是关系数据库里的记录。3、资源过滤:就是按照一定的条件提取数据库里的记录。
908 0