up:: SpringBoot电商项目商品分类模块删除目录分类接口

说明:

(1) 本篇博客需要注意的点:

● 使用PageHelper分页插件,来实现分页功能;即,重点就是在Spring Boot项目中,使用PageHelper分页插件;

● 然后,我们需要根据接口的要求,来决定后台怎么编写;

● 有关PageHelper插件,尤其是Page对象和PageInfo对象,可以参考【附加PageHelper分页插件的Page和PageInfo的区别】;


一:先看下接口文档和接口说明;

(1)后台的【分类列表(平铺)】接口:对应的界面效果;

通过项目演示,可以看到,【分类列表(平铺)】接口,主要的任务就是完成分页的功能;


(2)后台的【分类列表(平铺)】接口:接口文档要求;

该接口的返回内容:

 
{
	"status":  10000,
	    "msg":   "SUCCESS",
	    "data":  {
		"total":  19,
		        "list":  [
                    {
							"id":  3,
			                "name":   "新鲜水果",
			                "type":  1,
			                "parentId":  0,
			                "orderNum":  1,
			                "createTime":   "2019-12-17T17:17:00.000+0000",
			                "updateTime":   "2019-12-28T09:11:26.000+0000"
					},
                    {
							"id":  5,
			                "name":   "海鲜水产",
			                "type":  1,
			                "parentId":  0,
			                "orderNum":  2,
			                "createTime":   "2019-12-17T17:17:00.000+0000",
			                "updateTime":   "2019-12-28T08:25:20.000+0000"
					},
                    {
							"id":  6,
			                "name":   "精选肉类",
			                "type":  1,
			                "parentId":  0,
			                "orderNum":  3,
			                "createTime":   "2019-12-17T17:17:00.000+0000",
			                "updateTime":   "2019-12-28T08:25:21.000+0000"
					},
                    {
							"id":  9,
			                "name":   "冷饮冻食",
			                "type":  1,
			                "parentId":  0,
			                "orderNum":  4,
			                "createTime":   "2019-12-20T05:45:28.000+0000",
			                "updateTime":   "2019-12-28T08:25:22.000+0000"
					},
					{
							"id":  10,
			                "name":   "蔬菜蛋品",
			                "type":  1,
			                "parentId":  0,
			                "orderNum":  5,
			                "createTime":   "2019-12-20T05:45:28.000+0000",
			                "updateTime":   "2019-12-28T08:25:23.000+0000"
					},
                    {
							"id":  27,
			                "name":   "美味菌菇",
			                "type":  1,
			                "parentId":  0,
			                "orderNum":  7,
			                "createTime":   "2019-12-20T05:45:28.000+0000",
			                "updateTime":   "2020-02-10T15:20:36.000+0000"
					},
                    {
							"id":  4,
			                "name":   "橘子橙子",
			                "type":  2,
			                "parentId":  3,
			                "orderNum":  1,
			                "createTime":   "2019-12-17T17:17:00.000+0000",
			                "updateTime":   "2019-12-28T08:25:10.000+0000"
					},
                    {
							"id":  7,
			                "name":   "螃蟹",
			                "type":  2,
			                "parentId":  5,
			                "orderNum":  1,
			                "createTime":   "2019-12-17T17:17:00.000+0000",
			                "updateTime":   "2019-12-28T08:25:15.000+0000"
					},
                    {
							"id":  17,
			                "name":   "冰淇淋",
			                "type":  2,
			                "parentId":  9,
			                "orderNum":  1,
			                "createTime":   "2019-12-17T17:17:00.000+0000",
			                "updateTime":   "2019-12-28T08:25:18.000+0000"
					},
                    {
							"id":  16,
			                "name":   "牛羊肉",
			                "type":  2,
			                "parentId":  6,
			                "orderNum":  1,
			                "createTime":   "2019-12-17T17:17:00.000+0000",
			                "updateTime":   "2019-12-28T08:25:18.000+0000"
					}
                ],
		        "pageNum":  1,
		        "pageSize":  10,
		        "size":  10,
		        "startRow":  1,
		        "endRow":  10,
		        "pages":  2,
		        "prePage":  0,
		        "nextPage":  2,
		        "isFirstPage":  true,
		        "isLastPage":  false,
		        "hasPreviousPage":  false,
		        "hasNextPage":  true,
		        "navigatePages":  8,
		        "navigatepageNums":  [            1,             2        ],
		        "navigateFirstPage":  1,
		        "navigateLastPage":  2
	}
}

通过接口返回内容,可以看到【分类列表(平铺)】接口,是无差别的查询imooc_mall_category表,同时加入了分页功能;而且,可以看到,其要求接口的返回内容中的data需要是一个PageInfo分页对象;


二:分页技术,分析;

(1)以前接触过的分页查询;

以前在介绍Mybatis和Mybatis-Plus的时候,介绍过分页查询;可以先去快速看看;

(1) 在Mybatis中:在介绍Mybatis的时候,【MyBatis进阶五:PageHelper分页插件;】介绍了一款可以用在Mybatis上的一款分页插件PageHelper(PS:这个插件不隶属于Mybatis,只是别人针对Mybatis开发的一款插件);


(2) 我们在【SSM整合Mybatis-Plus】中,介绍了在Spring MVC项目中,配置Mybatis-Plus,以及Mybatis-Plus的分页插件;

(3) 在【Mybatis-Plus开发步骤:简述】及后面几篇博客,介绍了Mybatis-Plus分页插件的具体应用;

(2)根据接口要求,分页功能分析;

因为,接口文档中要求,返回中的data,需要是一个【PageInfo对象,序列化JSON】;所以,可以使用PageHelper分页插件(具体是使用PageHelper中的PageInfo对象),来完成这个需求;


有关,PageHelper中的Page对象和PageInfo对象的区别,可以参考【附加PageHelper分页插件的Page和PageInfo的区别】;

(3)本篇博客,重点是如何在Spring Boot项目中,使用PageHelper分页插件;

本篇博客的分页,采用的就是PageHelper这个分页插件;只是,我们之前介绍PageHelper的时候,是在纯Mybatis项目中,使用的;而,本篇博客就是在Spring Boot项目中使用PageHelper分页插件;

这二者基本上是一样的,只是在引入依赖等处存在略微的差别;


二:正式开发;

1.在CategoryController中,编写后台目录列表的方法:listCategoryForAdmin()方法;

    /**
     * 后台的,分类目录列表
     * @param pageNum
     * @param pageSize
     * @return
     */
    @ApiOperation("后台分类目录列表")
    @GetMapping("/admin/category/list")
    @ResponseBody
    public ApiRestResponse listCategoryForAdmin(@RequestParam("pageNum") Integer pageNum,
                                                @RequestParam("pageSize") Integer pageSize) {
        PageInfo pageInfo = categoryService.listForAdmin(pageNum, pageSize);
        return ApiRestResponse.success(pageInfo);
    }

说明:

(1) url,请求方式,参数,要符合接口要求;

(2) 因为这儿只有两个个参数,参数不多,所以没有使用JavaBean接受,而是直接用方法参数去接收了;

(3) 因为,接口返回中,data数据,要求是PageInfo对象;所以,如果一切成功时,ApiRestResponse统一返回对象的data,我们设为PageInfo;

(4) service层的查询数据方法,在下一部分介绍;

2.在CategoryServiceImpl实现类中,编写分页查询的方法listForAdmin();然后在CategoryService接口中,反向生成方法的声明;

(1)在CategoryServiceImpl实现类中,编写分页查询的方法listForAdmin();

 
         /**
          * 查询所有的目录分类数据,并包装成PageInfo分页对象;
          * @param pageNum
          * @param pageSize
          * @return
          */
         @Override
         public PageInfo listForAdmin(Integer pageNum, Integer pageSize) {
             //设置分页的:当前页,每一页的记录数;
             // 然后,查询结果先按照type排序(从小到大排序);如果type相同,就按照order_num排序;
             PageHelper.startPage(pageNum, pageSize, "type,order_num");
             //调用Dao层的方法,去查询
             List<Category> categoryList = categoryMapper.selectList();
             //得到PageInfo对象
             PageInfo pageInfo = new PageInfo(categoryList);
             return pageInfo;
         }

说明:

(1) 这儿使用到了PageHelper分页插件;主要使用到了其中的PageInfo对象;所以,为了使用PageHelper分页插件,我们需要在pom.xml中引入PageHelper分页插件的依赖;

        <!--pagehepler分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.13</version>
        </dependency>

(2) Dao层的selectList()方法,是查询所有目录分类数据;具体内容,在下一部分介绍;


(2)然后在CategoryService接口中,反向生成方法的声明;

3.在CategoryMapper接口中,定义查询所有分类目录的方法selectList();然后在CategoryMapper.xml中编写方法的SQL;

(1)在CategoryMapper接口中,定义查询所有分类目录的方法selectList();


(2)在CategoryMapper.xml中编写方法的SQL;

  <select id="selectList"  resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List"></include>
    from imooc_mall_category
  </select>

说明:

(1) 这个SQL很简单,就是查询所有分类目录数据;

4.启动项目,测试;

PS:后台的【分类列表(平铺)】接口需要是管理员用户登录,才能操作;

为了方便观察,把调用接口返回的data数据,复制出来,通过一个json.cn这个接口格式化在线工具,看一下;

其实,我们接口返回这些数据后,交给前端就行了;前端会根据这些数据,组织显示;