当前位置:网站首页>52:第五章:开发admin管理服务:5:开发【分页查询admin账号列表,接口】;(Swagger的@ApiParam(),对方法参数进行注释;PageHelper分页插件;拦截器拦截检查登录状态)
52:第五章:开发admin管理服务:5:开发【分页查询admin账号列表,接口】;(Swagger的@ApiParam(),对方法参数进行注释;PageHelper分页插件;拦截器拦截检查登录状态)
2022-07-27 12:48:00 【小枯林】
说明:
(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账号列表,接口】的拦截;
边栏推荐
- 聊聊feign组件的一个重要类RefectiveFeign
- 银行案例|Zabbix跨版本升级指南,4.2-6.0不香吗?
- SSM practical project - front back separation (easy to understand)
- 592. 分数加减运算 : 表达式计算入门题
- Poj2594 treasure exploration [bipartite graph minimum path coverage] [Floyd]
- multi-table query
- MySQL扩展
- Four characteristics of transactions (acid):
- GAN:生成对抗网络 Generative Adversarial Networks
- xshell7可以登录mysql虚拟机不能登陆mysql
猜你喜欢

开源项目丨Taier1.2版本发布,新增工作流、租户绑定简化等多项功能

面试考点:三种图的问题

18. Text processing tool -grep

@Simple understanding and use of conditionalonproperty

GAN:生成对抗网络 Generative Adversarial Networks

CVPR22 | 关系意识的图神经架构搜索

Set interface

Seata 在蚂蚁国际银行业务的落地实践

multi-table query

Amd adrenalin 22.7.1 driver update: double the performance of OpenGL and support Microsoft win11 22h2 system
随机推荐
heap
高度塌陷最终解决方案(无副作用)
Overview of static inner classes and non static inner classes
轮播图
Reptile
Do you really understand CMS garbage collector?
Baoli food listed on Shanghai Stock Exchange: annual revenue of 1.578 billion, market value of 5.8 billion
592. 分数加减运算 : 表达式计算入门题
pg同步多张数据表至mysql 有办法简化配置吗?
Bank case | ZABBIX cross version upgrade guide, isn't 4.2-6.0 popular?
Do you really understand CMS garbage collector?
记忆中的香河肉饼
Method of changing thread state
Flinksql synchronizes data from Oracle to Doris, with a total of more than 50 fields and more than 30 million entries in Oracle tables
ECCV2022 | RU&谷歌提出用CLIP进行zero-shot目标检测!
面试考点:三种图的问题
视频游戏沉迷行为研究综述
从tidb实时同步到mysql 只能用 tidb binlog 工具吗?
力扣 1480. 一维数组的动态和 383. 赎金信412. Fizz Buzz
完美指南|如何使用 ODBC 进行无代理 Oracle 数据库监控?







、



