up:: SpringBoot电商项目商品分类模块后台的分类列表平铺接口
说明:
(1) 本篇博客的核心是就一条:递归查询的解决套路;主要有两点:
● 由于接口文档,要求是返回的数据,需要是递归嵌套的数据;所以,要创建CategoryVO这个bean,去包装查到的数据;以满足接口对返回数据的格式的要求;
● 递归查询的逻辑;(这条尤为重要);
(2) 本篇博客内容其实不难,但可能存在一定的理解难度;静下心来,仔细看,就很容易理解的;
一:先看下接口文档和接口说明
(1)前台的【分类列表(递归)】接口:在前台页面上的显示效果;
可以看到,我们这儿的【商品分类】需要按照层级关系,递归的查询出来;
(2)前台的【分类列表(递归)】接口:接口文档;
因为,这个接口是前台的,所以这个接口不需要是会员(包括管理员)登录;即,这个接口的url是【/category/list】,没有admin;
该接口返回的内容:
接口返回中,data数据分析:
所以,这就要求:我们在查询某个一级目录时,要查查该一级目录下是否有所属的二级目录;然后如果有二级目录的话,要查查该二级目录下是否有所属的三级目录;
这在接口文档中,定义了规范:
(3)接口文档分析:结果;(递归数据的分析;创建,承载递归数据的实体Bean:CategoryVO)
通过上面的分析,可以得到下面的逻辑分析:【接口文档中,规定了后端返回的数据格式】→【其数据格式,明显体现了递归的思想】→【后端为了能够组织出,这样的、充满递归思想的、符合接口要求的、数据格式:需要创建一种充满递归思想的实体Bean】→【因为要符合接口要求,在这个实体Bean中,应需要有个属性是List集合;;然后,该集合中是数据类型也是该实体Bean】→【所以,这儿我们就创建了CategoryVO这个实体Bean】;
CategoryVO:
能理解【List<CategoryVO> childCategory】在递归查询中的,层层嵌套所起的作用;很重要;
二:正式开发;
1.在CategoryController类中,创建前台商品分类目录的方法:listCategoryForCustomer()方法;
说明:
(1) url,请求方式,要符合接口要求;
(2) 因为,这个接口就是查询所有的商品分类数据;即,这个接口的目标是固定且明确的;所以,这个接口不需要参数;
(3) 因为要符合接口的要求:接口的返回结果的ApiRestResponse的data,就是一个List<CategoryVO>;
(4) 有关Service层的listCategoryForCustomer()方法,在下一部分介绍;
2.在CategoryServiceImpl实现类中,编写分页查询的方法listCategoryForCustomer();然后在CategoryService接口中,反向生成方法的声明;
(1)在CategoryServiceImpl实现类中,编写分页查询的方法listCategoryForCustomer();(递归查询:核心,重点!!!)
说明:
(1)这儿并不是很好理解(但其实还好啦),要仔细看注释;主要是递归查询的思想;以及,每个CategoryVO中的【List <CategoryVO> childCategory】是用来存放,所有对应下级目录数据的;
而这种,对应有关联的级别之间的层层包裹,就是我们这儿递归的核心;
(2) Dao层的selectCategoriesByParentId()方法,是根据parent_id查询对应级别分类数据;具体内容,在下一部分介绍;
(3) 这儿的核心是,熟悉【解决递归查询需求的,策略】;
(2)然后在CategoryService接口中,反向生成方法的声明;
3.在CategoryMapper接口中,定义【根据parent_id查询对应级别分类数据】的方法selectCategoriesByParentId();然后在CategoryMapper.xml中编写方法的SQL;
(1)在CategoryMapper接口中,定义【根据parent_id查询对应级别分类数据】的方法selectCategoriesByParentId();
这儿为了更加“完美”,虽然只有一个参数,也使用了@Param注解;
(2)然后在CategoryMapper.xml中编写方法的SQL;
4.启动项目,测试;