前端的做法是使用Ztree来做,感兴趣的同学可以自己试试。
先说我们最后给前端的是一个什么类型的值哈,例如说你这边做的是一个仓库(categories)的东西的分类,那么就是返回这个
List<Categories>这个东西
再看看数据库是怎么设计的。
然后怎么输入数据呢
例如说对于这个,你就先把 图书、音像、电子书刊,手机,家用电器输进来
然后转到第二层,电子书刊、音像、英文原版 它们是第二级的,输第二层的数据的时候,记得他们的parentid就是上面的id=1,然后level为2,依次类推,才不会混乱。
代码层面是这样做的
@GetMapping
public Resp<List<CategoryEntity>> queryCategoriesByPidOrLevle(@RequestParam(value="level",defaultValue = "0") Integer level ,
@RequestParam(value="parentCid",required = false) Long pid){
QueryWrapper<CategoryEntity> wrapper = new QueryWrapper<>();
//判断分类的级别是否为0
if (level != 0){
wrapper.eq( "cat_level",level );
}
//判断父节点的id是否为空
if (pid != null){
wrapper.eq( "parent_id",pid );
}
List<CategoryEntity> categoryEntities = categoryService.list( wrapper );
return Resp.ok( categoryEntities );
}
前端申请的时候分别会要求一个level和parentcID ,其中一个level给他默认值,另一个是给它设为不必填,因为用户不定是要查某一个父节点底下的所有节点,也有可能是查所有的节点。
关键就在于List这个方法做了什么,list方法继承了mybatisPlus的IService的接口,换言之,它就是MyBatisPlus提供的。
到对应的包的impl查看它的实现类咋们说
就是调用了baseMapper的 selectList方法。
结合mybatis中selectList的用法,不难判断这是一个多条件查询语句。
Wrapper里放进两个变量(其中一个是level=0),表示我们页面刚刚加载的时候仅需要最外面那一层的数据,返回一个List<Object>,然后当我们点开具体的某个层的时候,Ztree会把父节点的位置给对应上,此时,就会得到一个该父节点下所有子节点的页面,显示在页面上。这一点从我们的NetWork上可以看到。