码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Spring Data @Repository 的分页查询


    分页查询在网站的设计中必不可少。

    分页查询有几种方式,通常用的是:网页分页和后端分页。

    不要觉得现在还有人用网页分页的方式吗?

    相信我,奇葩远比想象得多。经历过一个项目,全部都是网页分页,后端都是大量的 JOIN 和毫无人性的返回几千条记录。

    为什么不返回上万条?那是因为后台数据库不大,只有 5 万多点的数据量。连个 Limit 都懒得用的项目还堂而皇之的上线运行了好几年到不重做差不多就没法用的地步。

    我们来说说基于 Spring Data 的分页查询。

    如果项目使用的是 Spring Data,那么恭喜你,这分页太方便了。

    PagingAndSortingRepository 接口

    首先你的实体仓库类,需要继承 PagingAndSortingRepository 这个接口。

    写法也简单到只写一个继承就可以了。

    PagingAndSortingRepository 接口继承于 CrudRepository 接口,拥有CrudRepository 接口的所有方法, 并新增两个功能:分页和排序。

    Service

    Service 层也简单到不能再简单了。

    假设我们希望查询一个实体类的所有数据,但是我们希望进行分页。

    我们可以简单到

    1. public Page<Visa> findAllVisa(Pageable pageable) {
    2. return visaRepository.findAll(pageable);
    3. }

    只写这一段话就可以了。

    我们只需要把 pageable 作为参数传递进去就行了。

    Pageable 是一个接口。

    定义分页对象

    要对实体数据进行分页,我们需要让实体数据知道后面查询的时候是怎么分页的。

    在服务层或者控制层定义一个 Pageable 对象。

     

    1. if (ObjectUtils.isEmpty(searchCondition)) {
    2. Pageable visaPage = PageRequest.of(pageNumber, 100, Sort.by("dateVisaInterview").descending());
    3. pageableResponse.setPagedData(visaService.findAllVisa(visaPage));
    4. }

    在这个对象中,我们创建了一个 visaPage 分页对象。

    在这个分页对象中,我们提供了参数:

    1. 分页的当前页
    2. 每一个页面的大小
    3. 排序字段

    返回

    在分页查询的结果都会返回一个叫做 Page 的对象。

    Page 是一个接口,继承的 Slice。

    为了让程序更加简单,我们直接定义了一个返回的对象。将 Page 的内容返回到 API 上。

    运行结果

    如果 API 运行没有问题的话,在 API 的返回中,我们可以看到下面的信息。

     

     

    针对分页查询的所有信息都有了。

    包括有当前页,页大小,偏移量,总数据量。

    使用 Spring Data 的分页查询,能够大大加快程序的处理,甚至能够让程序员不再关注后端是如何获得查询数据和如何进行查询的。

    真的是一个非常贴心的接口。

    Spring Data @Repository 的分页查询 - Spring - OSSEZ分页查询在网站的设计中必不可少。 分页查询有几种方式,通常用的是:网页分页和后端分页。 不要觉得现在还有人用网页分页的方式吗? 相信我,奇葩远比想象得多。经历过一个项目,全部都是网页分页,后端都是大量的 JOIN 和毫无人性的返回几千条记录。 为什么不返回上万条?那是因为后台数据库不大,只有 5 万多点的数据量。连个 Limit 都懒得用的项目还堂而皇之的上线运行了好几年到不重做差不多就没法用的地步。 我们来说说基于 Spri…https://www.ossez.com/t/spring-data-repository/14097

  • 相关阅读:
    java计算机毕业设计古惠农产品线上销售系统源码+mysql数据库+系统+LW文档+部署
    java计算机毕业设计干洗店订单管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
    国考省考申论:归纳概括题,审题,找点,加工,书写,概括举措的案例
    I/O多路复用三种实现
    瑞吉外卖Redis
    【擎标】CCID信息系统服务商交付能力等级认证标准
    人工智能画画 yyds
    笔记---fastadmin踩坑之旅,fastadmin thinkphp 编辑数据下拉菜单 默认选择之前的值
    【开箱即用】开发了一个基于环信IM聊天室的Vue3插件,从而快速实现仿直播间聊天窗功能
    C++高效集合数据结构设计
  • 原文地址:https://blog.csdn.net/huyuchengus/article/details/126810769
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号