多级菜单(父子)结构组装或课程多级分类(父子)结构组装的思路

这里以课程多级分类为例来实现父子结构的组装

先看数据库中的存储

在这里插入图片描述

仔细看pid和path一栏可以发现有多级结构
存在子中还有子的情况

详解

使用的框架:mybatis-plus

需要注意的地方:

//实体类添加了字段后,需要加上下面注解,告诉mybatis-plus框架,表中没有这个字段,否则会报错
@TableField(exist = false)
//这里最好是直接new出来,否则后面代码很容易出错
private List<CourseType> children = new ArrayList<>();

代码

核心思路:各自找各自的父,找到后装进各自父课程类型中的children中
public List<CourseType> treeData() {
		//先查所有课程分类     null:表示没有条件
        List<CourseType> courseTypes = baseMapper.selectList(null);
        //准备集合装所有 顶级父亲(pid == 0)
        List<CourseType> topLevelParentCourseTypes = new ArrayList<>();
        //遍历所有课程分类
        for (CourseType courseType : courseTypes) {
            //判断pid,为0即为顶级父亲
            //Java里面定义的id是Long包装类型,转成long来和0比较是最准确的
            if(courseType.getPid().longValue() == 0){
                //将顶级课程分类放入集合中的CourseType中
                topLevelParentCourseTypes.add(courseType);
            } else {//非顶级课程分类,即pid不为0
                //遍历非顶级课程分类
                //核心思路:各自找各自的父,找到后装进各自父课程类型中的children中
                for (CourseType currentCourseTypes : courseTypes) {
                    //当前分类的id和某个分类的pid相等那么这一对就是父子
                    if(currentCourseTypes.getId().longValue() == courseType.getPid().longValue()){
                        //父  currentCourseTypes       子  courseType
                        //将子装进父中children里
                        currentCourseTypes.getChildren().add(courseType);
                        //成功找到一对父子并装好结构,结束该循环。
                        break;
                    }
                }
            }
            //break后,开始下一次循环找其他的父子并组装
        }
        //返回已经组装好的结构
        return topLevelParentCourseTypes;
    }

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值