一、后端实现
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/bc772c46e5ae6c52734450d88eba4fc1.png)
1、创建vo
//一级分类
@Data
public class OneSubject {
private String id;
private String title;
//一个一级分类有多个二级分类
private List<TwoSubject> children=new ArrayList<>();
}
//二级分类
@Data
public class TwoSubject {
private String id;
private String title;
}
2、创建controller
@Api(description = "课程管理")
@RestController
@RequestMapping("/eduservice/subject")
@CrossOrigin
public class SubjectController {
@Autowired
private SubjectService subjectService;
//课程分类列表(树形)
@ApiOperation(value = "课程分类列表(树形)")
@GetMapping("getAllSubject")
public R getAllSubject(){
//list集合是一级分类
List<OneSubject> list= subjectService.getAllOneSubject();
return R.ok().data("list",list);
}
}
3、创建service
①接口
public interface SubjectService extends IService<Subject> {
//课程分类列表(树形)
List<OneSubject> getAllOneSubject();
}
②实现Final
@Service
public class SubjectServiceImpl extends ServiceImpl<SubjectMapper, Subject> implements SubjectService {
//课程分类列表(树形)
@Override
public List<OneSubject> getAllOneSubject() {
//1查询是所有的一级分类 parentid=0
QueryWrapper<Subject> wrapperOne=new QueryWrapper<>();
wrapperOne.eq("parent_id","0");
List<Subject> oneSubjectList=baseMapper.selectList(wrapperOne);
//2查询是所有的二级分类parentid!=0
QueryWrapper<Subject> wrapperTwo=new QueryWrapper<>();
wrapperTwo.ne("parent_id","0");
List<Subject> twoSubjectList=baseMapper.selectList(wrapperTwo);
//创建一个list集合,用于存储最终数据
List<OneSubject> finalSubjectList = new ArrayList<>();
//3封装一级分类
//遍历一级分类,放S进最后的集合
for(int i =0;i<oneSubjectList.size();i++){
//得到每个oneSubject
Subject eduSubject=oneSubjectList.get(i);
//把Subject里面的值取出来,放到OneSubject对象里面
//多个Oneubject放到finalSubjectList里面
OneSubject oneSubject=new OneSubject();
//第一个值是get对象,第二个值是set对象
//edusubject的值复制到oneSubject对象里面去
BeanUtils.copyProperties(eduSubject,oneSubject);//spring fw中的,不要导错包
finalSubjectList.add(oneSubject);
//在一级分类的里面循环便利查询所有的二级分类
//创建list集合封装每个一级分类的二级分类
//4封装二级分类
List<TwoSubject> twoFianlSubjectList=new ArrayList<>();
//遍历twoFianlSubjectList
for (int k=0;k<twoSubjectList.size();k++) {
//获取每个二级分类、
Subject tSubject=twoSubjectList.get(k);
//判断所有二级分类的parent_id和一级分类的id是否一样
if(tSubject.getParentId().equals(eduSubject.getId())){
//把tSubject的值复制到TwoSubject中去,放到twoFianlSubjectList
TwoSubject twoSubject=new TwoSubject();
//第一个值是get对象,第二个值是set对象
//subject的值复制到oneSubject对象里面去
BeanUtils.copyProperties(tSubject,twoSubject);//spring fw中的,不要导错包
twoFianlSubjectList.add(twoSubject);
}
}
// 把一级下面的所有二级分类都放到一级分类里面
oneSubject.setChildren(twoFianlSubjectList);
}
return finalSubjectList;
}
}