​在线问题反馈模块实战(十三)​:实现多参数分页查询列表

举报
bug菌 发表于 2023/06/16 15:08:47 2023/06/16
【摘要】 我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

👨‍🎓作者:bug菌
✏️博客:CSDN掘金infoQ51CTO
🎉简介:CSDN/阿里云/华为云/51CTO 博客专家,博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者,全网粉丝合计10w+,硬核微信公众号猿圈奇妙屋」,欢迎你的加入!免费领取简历模板/学习资料/大厂面试真题/职业规划等海量资料。
..
✍️温馨提醒:本文字数:1999字, 阅读完需:约 6 分钟

        嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!

        如果小伙伴们在批阅文章的过程中觉得文章对自己有帮助,请别吝啬手中的赞呀,大胆的把文章点亮👍,相信你点赞了好的文章,平台也会经常给你推荐高质量好文,您的点赞三连(收藏+关注+留言)就是对bug菌写文道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

一、前言🔥

       接下来的这几期,bug菌想跟大家分享一下自己昨天刚接到一个临时的需求,热乎着呢,想分享一下自己是如何面对临时需求并制定整个开发周期,其中包括从梳理业务到创建业务表再到实现业务逻辑形成闭环再到与前端对接,其中会穿插一些业务拓展及功能性拓展,这一条龙流程在线与大家一起见证,分享给刚入门的小伙伴,希望对你们有所帮助。

环境说明:idea2019.3 + springboot2.3.1.REALSE + mybati-plus3.2.0 + mysql5.6 + jdk1.8

       若小伙伴们在批阅文章的过程中觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️ 

二、正文🔥

         在上一期,我们是完整的讲述了从Controller接口定义到接口方法实现,完美实现了按指定路径进行图片上传及数据库记录插入。而这一期,我要给大家讲点什么嘞?你们想知道么?其实也有据可循,你们想想,一个业务肯定是要形成闭环,图片也是,图片上传就要支持本地下载、在线预览、在线删除等业务线。所以这一期,我给大家讲讲,如何实现指定图片在线预览功能,具有很好的教学价值,希望大家能挺我,认真把它看完。

 三、如何代码实现分页查询功能🔥

        如下就是从零到一带着你如何定义一个分页请求,具体业务具体分析,等于你亲临这个业务。首先,我们先来分析一下,对于此分页,我们需要啥分页参数,这个一般由业务定好,需要啥分页查询参数,我们就直接定义个参数去接收即可。

        比如对于目前的问题反馈业务,这里需要涉及的分页参数有,页码page,页容量limit这是必须要有的,其他就看业务需要了,比如当前还需要有所属部门(dept),反馈人姓名(name),反馈人域账号id(accountId)及问题类型(questionType)。

        既然确定了分页参数,那我们就直接创建个参数pojo吧。

1️⃣定义分页pojo

        我们先是要定义好的查询参数pojo,然后直接继承Pageable分页参数,这是我直接封装出来的分页pojo。我们先来看下查询参数pojo

 QueryUserQuestionModel.java

@Data
@ApiModel(value = "按条件分页查询反馈问题列表", description = "按条件分页查询反馈问题列表")
public class QueryUserQuestionModel extends Pageable{

    @ApiModelProperty(value = "所属部门")
    private String dept;

    @ApiModelProperty(value = "反馈人姓名")
    private String name;

    @ApiModelProperty(value = "反馈人域账号")
    private String accountId;

    @ApiModelProperty(value = "反馈问题类型")
    private String questionType;
}

        也给大家看一眼吧,我定义的Pageable pojo。仅供参考,需要的小伙伴也是可以直接拿去用,不用大家还手动创建一遍了。

@Data
@ApiModel(value = "分页参数", description = "分页参数")
public class Pageable implements Serializable {

	private static final long serialVersionUID = 1L;

	@NotNull(message = "页码不能为空")
	@ApiModelProperty(value = "当前页码", required = true)
	protected Integer page;

	@NotNull(message = "页面容量不能为空")
	@ApiModelProperty(value = "页面容量", required = true)
	protected Integer limit;
}

2️⃣定义Controller请求

        既然都创建完了pojo类,那接口请求方式肯定得[POST]了,这毫无疑问,接着就是定义好分页查询接口了,这里我都给大家分析的这么透彻,想必也是直接定义就可以了,唯独要注意的就是定义请求路径,尽量越见名知其意越好。

    @PostMapping("/get-list-by-page")
    @ApiOperation(value = "按条件分页查询反馈问题列表", notes = "按条件分页查询反馈问题列表")
    public ResultResponse<IPage<UserQuestionsEntity>> getListByPage(@RequestBody QueryUserQuestionModel model) {
        return new ResultResponse<>(userQuestionsService.getListByPage(model));
    }

        然后这里返回值类型必须要用IPage类来修饰,因为你既然要使用mp提供分页插件,那就得按此分页类型来修饰返回。 

3️⃣定义接口方法getListByPage()

        这里就直接定义就好。

IPage<UserQuestionsEntity> getListByPage(QueryUserQuestionModel model);

4️⃣实现getListByPage()方法

        这里唯独要注意的就是入参判断,因为跟前端小伙伴得约定好,倘若用户不传某参数,那肯定是不按此参数进行拼接查询吧。因为这也是默认约定俗成的,即我们就要对分页参数进行判空处理,也是有现场的工具类判断,比如StringUtils,这是Apache中common.lang3所提供字符串工具类,还是非常强大的。

        比如这样:如果该字段传空或者null值,分页查询sql就不拼接条件参数。

if (StringUtils.isNotEmpty(model.getAccountId())) {
    wrapper.eq(UserQuestionsEntity::getCreatorAccountId, model.getAccountId());
}

        这里用到的还是LambdaQueryWrapper参数构造器,具体用法大家可上mp的官网瞅瞅。

然而具体的实现代码大家可见如下:

@Override
    public IPage<UserQuestionsEntity> getListByPage(QueryUserQuestionModel model) {

        Page<UserQuestionsEntity> page = PageableUtils.getPage(model, UserQuestionsEntity.class);

        LambdaQueryWrapper<UserQuestionsEntity> wrapper = new LambdaQueryWrapper<>();
        //不为空就拼接
        if (StringUtils.isNotEmpty(model.getAccountId())) {
            wrapper.eq(UserQuestionsEntity::getCreatorAccountId, model.getAccountId());
        }
        if (StringUtils.isNotEmpty(model.getDept())) {
            wrapper.eq(UserQuestionsEntity::getCreatorDeptName, model.getDept());
        }
        if (StringUtils.isNotEmpty(model.getName())) {
            wrapper.eq(UserQuestionsEntity::getCreatorName, model.getName());
        }
        if (StringUtils.isNotEmpty(model.getQuestionType())) {
            wrapper.eq(UserQuestionsEntity::getCreatorAccountId, model.getQuestionType());
        }
        wrapper.notIn(UserQuestionsEntity::getStatus, 1);//不查询删除的问题
        wrapper.orderByDesc(UserQuestionsEntity::getCreateTime);

        return this.page(page, wrapper);
    }

5️⃣接口测试

        接口既然定义好了,那我们接下来,就是测试了,我们就直接跳过junit单元测试,直接上postman或者swagger接口测试,毕竟对于这种接口都了然于胸,非常的熟悉,如下我就给大家演示一遍,如何在swagger上进行接口测试吧。

        如上展示的是具体swagger参数。如下是其查询结果展示:

         然后我再给大家演示一下,传某个参数试试。然后具体查询条数是否有误,大家可自行判断,我这里显然是没问题的。

         基本就如此,剩下的测试就你们自己自行去测试了哈,我就不给大家一一演示了哦。

6️⃣总结

        总结一下,这里对于分页查询,推荐的还是mp所封装的分页插件,比较省事,都不需要配置额外的配置文件。开箱即用型。

        好啦,以上就是这期的所有内容啦,你们学废了么?如果对你有所帮助,还请不要忘记给bug菌[三连支持]哟。如果想获得更多的学习资源或者想和更多的技术爱好者一起交流,可以关注我的公众号『猿圈奇妙屋』,后台回复关键词领取学习资料、大厂面经、面试模板等海量资源,就等你来拿。

三、往期热文推荐🔥

        对于问题反馈模块实战开发,我完整的梳理了每一期的教学及链接地址,仅供参考:希望能对你们有所帮助。

        如上是整整二十期内容,每一期都是干货,对于一个模块的开发,如何一点一滴打造并测试部署上线,我再说一遍,这不是演习,是实战!是实战!是实战!

        若你们觉得只是需要了解其中某个知识点或者业务的话,也不反对,你就选择其中的几期进行学习就好,反正都已经完结啦;我只希望你们能有所收获,有所成长,也就不枉我苦心每天下班后给大家总结更新。

四、文末🔥

        如果还想要学习更多,小伙伴们直接订阅bug菌专门为大家创建的零基础入门Spring Boot专栏《滚雪球学Spring Boot》,从无到有,从零到一!以知识点+实例+项目的学习模式由浅入深对Spring Boot框架进行学习&使用。

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。