52:第五章:开发admin管理服务:5:开发【分页查询admin账号列表,接口】;(Swagger的@ApiParam(),对方法参数进行注释;PageHelper分页插件;拦截器拦截检查登录状态)

说明:

(1)本篇博客内容:开发【分页查询admin账号列表,接口】;

目录

一:本篇博客合理性说明; 

二:正式开发;

1.在【api】接口工程的AdminMngControllerApi接口中,定义【分页查询admin账号列表,接口】;

2.在【admin】管理服务的AdminMngController类中,去实现【分页查询admin账号列表,接口】;

3.在【admin】管理服务的AdminUserService接口中,定义一个可以实现【分页查询admin账号列表,接口】;

4.在【admin】管理服务的AdminUserServiceImpl实现类中,去实现【分页查询admin账号列表,接口】;

三:效果;

四:【新增admin账号,接口】、【分页查询admin账号列表,接口】,也是需要用户在登录的时候,才能够操作的;


一:本篇博客合理性说明; 

然后,本篇博客,就是去开发【查询admin账号列表,接口】


二:正式开发;

1.在【api】接口工程的AdminMngControllerApi接口中,定义【分页查询admin账号列表,接口】;

    /**
     * 【分页查询admin账号列表,接口】;
     *
     * @param page:想要查询第几页;
     * @param pageSize:每一页的条目数;
     * @return
     */
    @ApiOperation(value = "查询admin列表", notes = "查询admin列表", httpMethod = "POST")
    @PostMapping("/getAdminList") //设置路由,这个是需要前后端约定好的;
    public GraceJSONResult getAdminList(@RequestParam @ApiParam(name = "page", value = "想要查询第几页", required = false)
                                                Integer page,
                                        @RequestParam @ApiParam(name = "pageSize", value = "每一页的条目数", required = false)
                                                Integer pageSize);

说明:

(1)这个接口的url、请求方式、参数,不是瞎写的,前后端要保持一致;

(2)这儿,使用到了Swagger的@ApiParam(),来对方法中的参数,进行注释;

2.在【admin】管理服务的AdminMngController类中,去实现【分页查询admin账号列表,接口】;

    /**
     * 【分页查询admin账号列表,接口】;
     *
     * @param page:想要查询第几页;
     * @param pageSize:每一页的条目数;
     * @return
     */
    @Override
    public GraceJSONResult getAdminList(Integer page, Integer pageSize) {

        //如果前端在请求这个接口的时候,没有传page参数;那么我们就给其一个默认值1;
        if (page == null) {
            page = COMMON_START_PAGE;
        }
        //如果前端在请求这个接口的时候,没有传pageSize参数;那么我们就给其一个默认值10;
        if (pageSize == null) {
            pageSize = COMMON_PAGE_SIZE;
        }

        //调用service层的逻辑,去查询分页数据;
        PagedGridResult result = adminUserService.queryAdminList(page, pageSize);
        return GraceJSONResult.ok(result);
    }

说明:

(1)这儿判断了一下page和pageSize两个参数;如果前端没有传的话,就采用默认值;

(2)PageHelper分页插件以前自己曾经大量使用过;有关PageHelper分页插件的内容,如有需要,可以参考【附加:PageHelper分页插件的:Page和PageInfo的区别;】、【Spring Boot电商项目40:商品模块六:后台的【商品列表】接口;(想到了一个问题:【PageHelper分页查询的时候,无论如何都要先查询出所有数据】:这难道不是一种浪费吗?PS:理解错了啦)】等博客;

(3)然后,调用Service层编写的逻辑,去分页查询数据,并组装成符合前端要求的分页对象;

          ● 这儿,我们在【common】通用工程中,创建了PagedGridResult类;我们基于这个类,来组装分页对象;

package com.imooc.utils;

import java.util.List;

/**
 * 
 * @Title: PagedGridResult.java
 * @Package com.imooc.utils
 * @Description: 用来返回分页Grid的数据格式
 * Copyright: Copyright (c) 2019
 */
public class PagedGridResult {
	
	private int page;			// 当前是第几页
	private long total;			// 总页数
	private long records;		// 总记录数
	private List<?> rows;		// 每行显示的内容,也就是当前页中的数据;

	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}

	public long getTotal() {
		return total;
	}

	public void setTotal(long total) {
		this.total = total;
	}

	public void setTotal(int total) {
		this.total = total;
	}
	public long getRecords() {
		return records;
	}
	public void setRecords(long records) {
		this.records = records;
	}
	public List<?> getRows() {
		return rows;
	}
	public void setRows(List<?> rows) {
		this.rows = rows;
	}
}

          ● 我们之所以,没有直接使用PageHelper提供的Page对象或者PageInfo对象,来作为"后端返回给前端的分页对象",而是创建了PagedGridResult,来作为"后端返回给前端的分页对象";其主要原因是,后端返回给前端的分页对象,需要满足前端的要求;

          ● 讲道理,这儿前端的内容没有细看;前后端之间的约定,也不是自己定的;也没有明确的接口文档;所以,这儿暂时没必要花费精力,把所有东西都彻底搞明白;

          ● 只需要知道【我们创建了PagedGridResult对象;然后,我们分页的时候,按照PagedGridResult规定的格式去组装分页对象,然后返回给前端,就是符合前后端约定的,就是OK的;】,(目前来看)就足够了;

3.在【admin】管理服务的AdminUserService接口中,定义一个可以实现【分页查询admin账号列表,接口】;

    /**
     * 分页查询,admin_user管理员列表
     * @param page:想要查询第几页;
     * @param pageSize
     * @return
     */
    public PagedGridResult queryAdminList(Integer page, Integer pageSize);

说明:

(1)service层的这个方法,返回值类型就是PagedGridResult分页对象;

4.在【admin】管理服务的AdminUserServiceImpl实现类中,去实现【分页查询admin账号列表,接口】;

    /**
     * 分页查询,admin_user管理员列表
     * @param page:想要查询第几页;
     * @param pageSize
     * @return
     */
    @Override
    public PagedGridResult queryAdminList(Integer page, Integer pageSize) {

        // 1.开启分页
        PageHelper.startPage(page, pageSize);

        // 2.利用tkmybatis的Example,自定义查询条件;利用上面设置的分页信息,去查询admin_user表;
        // 2.1先创建一个查询实例,这个实例,是针对AdminUser作查询的;
        Example adminExample = new Example(AdminUser.class);
        //Example可以不设置查询条件;同时,也可以追加一些参数;比如,这儿我们按照创建时间倒序排列;
        adminExample.orderBy("createdTime").desc();
        // 我们这儿是:不附加任何条件的,去查询admin_user表;换句话说,(如果我们没有在1中设置分页信息的话)
        // 我们就是要查询admin_user表的所有内容;
        List<AdminUser> adminUserList = adminUserMapper.selectByExample(adminExample);

        // 3.然后,根据前端的要求,组装一个满足要求的分页对象;我们,这儿根据前端的要求,创建了一
        // 个PagedGridResult对象;我们将会使用这个对象,来组装返回给前端的分页对象;
        return setterPagedGrid(adminUserList, page);

    }

    /**
     * 工具方法:根据分页查询数据库的结果,组装成(满足前端要求的)分页对象;
     * 对于我们这个项目来说,我们创建了一个PagedGridResult对象;这个对象,可以满足前端对分页数据格式的要求;
     *
     * @param adminUserList: 根据分页条件,查询数据库,得到的当前页的数据;
     * @param page:想要查询第几页;
     * @return
     */
    private PagedGridResult setterPagedGrid(List<?> adminUserList, Integer page) {

        /**
         * 利用PageHelper官方提供的PageInfo:根据上面分页查询的结果,得到PageInfo分页对象;
         * 这个PageInfo分页对象,会帮我们计算出很多有关分页的信息;
         */
        PageInfo<?> pageInfo = new PageInfo<>(adminUserList);

        //创建PagedGridResult对象,并组装;
        PagedGridResult pagedGridResult = new PagedGridResult();
        pagedGridResult.setRows(adminUserList);// 把【根据分页条件查询数据库,得到的当前页的数据;】设置进去;
        pagedGridResult.setPage(page);//设置当前是第几页
        pagedGridResult.setRecords(pageInfo.getTotal());// Todo 通过pageInfo,获取总记录数;(经过实测,我这儿的写法是靠谱的)
        pagedGridResult.setTotal(pageInfo.getPages());// Todo 通过pageInfo,获取总页码数;

        //返回,组装好的PagedGridResult对象;
        return pagedGridResult;
    }

说明: 

(1)有关PageHelper分页的内容,可以参考 【附加:PageHelper分页插件的:Page和PageInfo的区别;】等博客;

(2)我们在【model】模型工程中,已经引入PageHelper依赖了;

(3)代码逻辑说明;

(4)只能说明,这儿前后端交互的时候,对于分页数据的处理,没有选用PageHelper提供的现成的PageInfo或Page;似乎不太优雅?

(5)代码逻辑说明:在组装PagedGridResult分页对象的时候,还是利用了PageHelper提供的PageInfo;

(6)代码逻辑说明:根据PagedGridResult分页对象的定义,给其各个属性赋值;(这儿的做法,和课程的做法不同;但是,经过实测,课程中的做法是不对的)

(7)以前两篇博客的修正:

          ● 在【Spring Boot电商项目40:商品模块六:后台的【商品列表】接口;(想到了一个问题:【PageHelper分页查询的时候,无论如何都要先查询出所有数据】:这难道不是一种浪费吗?PS:未解决)_小枯林的博客-CSDN博客_springboot商品列表】中的,这个疑问,是想多了;

          ● 在 【附加:PageHelper分页插件的:Page和PageInfo的区别;】中,有很多描述不严谨的地方,稍微调整了一下;


三:效果;

先全局install一下整个项目;然后,启动前端项目;记得使用SwitchHost开启虚拟域名映射;启动【admin】管理服务的主启动类;


四:【新增admin账号,接口】、【分页查询admin账号列表,接口】,也是需要用户在登录的时候,才能够操作的;

利用我们在【50:第五章:开发admin管理服务:3:开发【查询admin用户名是否已存在,接口】;(这个接口需要登录时才能调用;所以我们编写了拦截器,让其拦截请求,判断用户是否是登录状态;)】中创建的AdminTokenInterceptor拦截器;在InterceptorConfig类中配置AdminTokenInterceptor拦截器的地方,增加对【新增admin账号,接口】、【分页查询admin账号列表,接口】的拦截;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值