教育项目--课程模块优化【31】

提示:本章内容对于课程模块列表内容的游湖


前言

因为我们的项目中呢,采用的之后两次分类的课程模块,但是呢在现实我们项目中呢,还会有多级分类的情况,所以呢按照我们之前的想法呢,我们需要进行多级循环的嵌套才可以实现,而且还是固定的多级分类,而做不到活动的多级。


一、递归?

递归,就是在运行的过程中调用自己。

构成递归需具备的条件:

函数嵌套调用过程示例

  1. 子问题须与原始问题为同样的事,且更为简单;
  2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

二、使用步骤

1.创建课程返回封装对象

顶级分类的对象 ----SubjectNestedVo

package com.djr.eduservice.entity.vo;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * @Program: science_source_education
 * @Description
 * @Author: 涛涛 * ^ *
 * @Create: 2021-01-29 14:43
 **/
@Data
public class SubjectNestedVo {
    /**
     * 一级课程的ID
     */
    private String id;
    /**
     * 一级分类课程的名称
     */
    private String title;
    /**
     * 二级分类课程的集合
     */
    private List<?> children = new ArrayList<>();

}

次级分类对象 ----SubjectVo

package com.djr.eduservice.entity.vo;

import lombok.Data;

/**
 * @Program:   二级分类返回
 * @Description 课程分类
 * @Author: 涛涛 * ^ *
 * @Create: 2021-01-29 14:41
 **/
@Data
public class SubjectVo {
    /**
     * 二级分类id
     */
    private String id;
    /**
     * 二级分类课程名称
     */
    private String title;
}

2.service

    /**
     * 递归方式进行查询全部
     * @return
     */
    List<SubjectNestedVo> getSubjectList();

3.实现类

 /**
     * 获取顶级分类
     *
     * @return
     */
    @Override
    public List<SubjectNestedVo> getSubjectList() {
        //获取到顶级分类的集合
        List<EduSubject> eduSubjects = getParentId("0");
        return getTreeList(eduSubjects);
    }

    /**
     * 获取子分类
     *
     * @param parentId 其父类的ID
     * @return 参数parentId下的所有子类的集合
     */
    List<EduSubject> getParentId(String parentId) {
        QueryWrapper<EduSubject> queryWrapper = new QueryWrapper<>();

        queryWrapper.eq("parent_id", parentId);    // 0
        List<EduSubject> eduSubjects = baseMapper.selectList(queryWrapper);
        return eduSubjects;
    }

    /**
     * 获取数据
     *
     * @param eduSubjects 子类的集合
     * @return
     */
    List<SubjectNestedVo> getTreeList(List<EduSubject> eduSubjects) {

        List<SubjectNestedVo> subjectNestedVoList = new ArrayList<>();
        for (EduSubject eduSubject : eduSubjects) {
            SubjectNestedVo subjectNestedVo = new SubjectNestedVo();
            //id:449   parentId 0
            subjectNestedVo.setId(eduSubject.getId());
            subjectNestedVo.setTitle(eduSubject.getTitle());
            //449
            subjectNestedVo.setChildren(getTreeList(getParentId(eduSubject.getId())));

            subjectNestedVoList.add(subjectNestedVo);
        }

        return subjectNestedVoList;
    }

这里呢解释一下:

一共有三个方法
获取顶级分类
根据自己父ID获取次级分类的集合
递归获取数据然后进行数据的赋值

4. controller

    /**
     * 递归方式查全部
     * @return
     */
    @ApiOperation(value = "递归方式查询课程")
    @PostMapping("/getSubjectList")
    public R getSubjectList() {

        List<SubjectNestedVo> subjectList = eduSubjectService.getSubjectList();
        return R
                .ok()
                .data("items", subjectList);

    }

三、测试

在这里插入图片描述
这样呢话呢 ,在执行递归的时候会根据父类的ID进行一级一级的进行获取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小七会喷火

小七想要bi

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值