iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Spring JPA find分页示例详解
  • 708
分享到

Spring JPA find分页示例详解

Spring JPA find分页Spring JPA 2023-05-18 05:05:33 708人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录前言源码一、单纯分页查询查询结果结论二、排序分页查询查询结果三、方法整理总结:前言 在现实项目中,数据量一般都不小,如果一次性全部请求出来,肯定是影响性能,而且大量数据展示到页面

前言

在现实项目中,数据量一般都不小,如果一次性全部请求出来,肯定是影响性能,而且大量数据展示到页面上观感也不好。这时我们就需要用到分页,给定一个 pageSize,每次请求的数量就是 pageSize 的大小,这样既可以节约时间,又可以美化页面。Spring JPA 就为我们提供这样一个方法,准确来说是提供了一个对象用来约束数据按照分页的形式进行请求。

源码

findAll(Pageable pageable):从入参 pageable 我们可以猜到,就是这个对象来帮助我们对数据进行分页查询。那我们如何创建 pageable 对象呢?如何用他去实现分页呢?先看一下源码:


static Pageable ofSize(int pageSize) {
   return PageRequest.of(0, pageSize);
}

由此可见,pageable 对象需要 pageRequest.of 去创建,那我们再看看 pageRequest.of 的源码:


public static PageRequest of(int page, int size) {
   return of(page, size, Sort.unsorted());
}

public static PageRequest of(int page, int size, Sort sort) {
   return new PageRequest(page, size, sort);
}

public static PageRequest of(int page, int size, Direction direction, String... properties) {
   return of(page, size, Sort.by(direction, properties));
}

从源码可以看出,pageRequest.of 需要传入 page(第几页)和 size(页面大小),另外如果需要排序的话,还需要传入 sort(这个对象前一篇已经分析过了)。

一、单纯分页查询

所谓的单纯分页查询,就是只分页,不做其他的动作,这样一来,我们只需要传入 pagepageSize 即可。
control 层

@GetMapping("findAllPage")
public Page<User> findAllPage(int page, int pageSize) {
    Pageable pageable = PageRequest.of(page, pageSize);
    return userService.findAllPage(pageable);
}

执行请求findAllPage?page=0&pageSize=5(第一页、页面大小为5),控制台打印如下:

Hibernate: select user0\_.id as id1\_0\_, user0\_.age as age2\_0\_, user0\_.name as name3\_0\_ from user user0\_ limit ?
Hibernate: select count(user0\_.id) as col\_0\_0\_ from user user0\_

查询结果

{
    "content": [{
                    "id": 20,
                    "name": "aa",
                    "age": 11
            }, {
                    "id": 21,
                    "name": "bb",
                    "age": 12
            }, {
                    "id": 22,
                    "name": "cc",
                    "age": 11
            }, {
                    "id": 23,
                    "name": "dd",
                    "age": 16
            }, {
                    "id": 24,
                    "name": "ee",
                    "age": 17
            }
    ],
    "pageable": {
            "sort": {
                    "empty": true,
                    "sorted": false,
                    "unsorted": true
            },
            "offset": 0,
            "pageSize": 5,
            "pageNumber": 0,
            "unpaged": false,
            "paged": true
    },
    "last": false,
    "totalPages": 2,
    "totalElements": 6,
    "number": 0,
    "size": 5,
    "sort": {
            "empty": true,
            "sorted": false,
            "unsorted": true
    },
    "numberOfElements": 5,
    "first": true,
    "empty": false
}

结论

从上面的结果输出和控制台输出来看,它除了做了 limit 分页查询外,还做了求出了总数totalElements,还输出了总页数 totalPages。这些参数在我们实际项目中有的时候还是很有用的。

二、排序分页查询

所谓的排序分页,就是将数据先按照我们所需的方式进行排序,然后再进行分页查询
control 层

@GetMapping("findAllPageSort")
public Page<User> findAllPageSort(int page, int pageSize, String[] sorts, String[] paras) {
    List<Sort.Order> listOrder = new ArrayList<>();
    for(int i=0; i<sorts.length; i++){
        listOrder.add(new Sort.Order(sorts[i].toLowerCase().equals("asc") ?
                Sort.Direction.ASC : Sort.Direction.DESC, paras[i]));
    }
    Pageable pageable = PageRequest.of(page, pageSize, Sort.by(listOrder));
    return userService.findAllPage(pageable);
}

执行请求findAllPageSort?page=0&pageSize=5&sorts=asc,desc&paras=age,name(第一页,页面大小为5,先按照age升序,再按照name降序),控制台打印如下:

Hibernate: select user0_.id as id1_0_, user0_.age as age2_0_, user0_.name as name3_0_ from user user0_ order by user0_.age asc, user0_.name desc limit ?
Hibernate: select count(user0_.id) as col_0_0_ from user user0_

查询结果

{
	"content": [{
			"id": 26,
			"name": "gg",
			"age": 7
		}, {
			"id": 22,
			"name": "cc",
			"age": 11
		}, {
			"id": 20,
			"name": "aa",
			"age": 11
		}, {
			"id": 21,
			"name": "bb",
			"age": 12
		}, {
			"id": 23,
			"name": "dd",
			"age": 16
		}
	],
	"pageable": {
		"sort": {
			"empty": false,
			"sorted": true,
			"unsorted": false
		},
		"offset": 0,
		"pageNumber": 0,
		"pageSize": 5,
		"paged": true,
		"unpaged": false
	},
	"totalElements": 7,
	"last": false,
	"totalPages": 2,
	"number": 0,
	"size": 5,
	"sort": {
		"empty": false,
		"sorted": true,
		"unsorted": false
	},
	"numberOfElements": 5,
	"first": true,
	"empty": false
}

三、方法整理

以下是整理的 pageable 对象可用的一些比较实用的方法

方法说明
boolean unpagedtrue:未进行分页,false:进行了分页
boolean isPagedtrue:进行了分页,false:未进行分页
int getPageNumber获取当前页数
int getPageSize获取页面大小
long getOffSet获取页面偏移量,相当于sql中的start
Sort getSort获取当前的排序规则
Pageable next获取下一页的分页信息(翻页中的下一页)
boolean hasPrevious是否有上一页
Pageable previous获取上一页的分页信息(翻页钟的上一页)
Pageable first获取首页分页信息
Pageable previousOrFirst如果没有上一页则回到首页

总结:

分页查询是实际项目中非常常见的需求,总体上看也没有什么比较难的地方,需要注意的就是排序了。到目前为止学习的都是JpaRepository自带的一些接口,下面我们就开始接触非自带的需要我们自己去构造的方法了。

以上就是spring JPA find分页示例详解的详细内容,更多关于Spring JPA find分页的资料请关注编程网其它相关文章!

--结束END--

本文标题: Spring JPA find分页示例详解

本文链接: https://www.lsjlt.com/news/211587.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring JPA find分页示例详解
    目录前言源码一、单纯分页查询查询结果结论二、排序分页查询查询结果三、方法整理总结:前言 在现实项目中,数据量一般都不小,如果一次性全部请求出来,肯定是影响性能,而且大量数据展示到页面...
    99+
    2023-05-18
    Spring JPA find分页 Spring JPA
  • Spring JPA之find拓展方法示例详解
    目录前言一、单条件查询1、精确查询(确定值,例如:=、is)2、范围查询(一定范围,例如<、<=、>、>=、in、between)a)运算符b)between...
    99+
    2023-05-18
    Spring JPA find拓展方法 Spring JPA
  • Spring Data JPA注解Entity使用示例详解
    目录1、JPA协议中关于Entity的相关规定需要注意的是:2、常用注解2.1 JPA支持的注解2.2 常用注解3、联合主键3.1 @IdClass3.2 @Embeddable与@...
    99+
    2024-04-02
  • Spring Data JPA实现分页Pageable的实例代码
    在JPA中提供了很方便的分页功能,那就是Pageable(org.springframework.data.domain.Pageable)以及它的实现类PageRequest(org.springframework.data.domain...
    99+
    2023-05-31
    spring data jpa
  • Spring Data Jpa复杂查询的示例分析
    小编给大家分享一下Spring Data Jpa复杂查询的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring Data Jpa...
    99+
    2023-06-29
  • Spring JPA使用案例分析
    今天小编给大家分享一下Spring JPA使用案例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.什么是JPAJPA ...
    99+
    2023-06-27
  • Spring Data JPA 在 @Query 中使用投影的方法示例详解
    Spring Data JPA 在 @Query 中使用投影的方法 关于投影的基本使用可以参考这篇文章:https://www.baeldung.com/spring-data-jp...
    99+
    2024-04-02
  • JPA原生SQL分页查询逻辑的示例分析
    这篇文章将为大家详细讲解有关JPA原生SQL分页查询逻辑的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JPA原生SQL(自定义SQL)分页查询JPA自己写SQL查询的话,分页还稍微麻烦经过测试下...
    99+
    2023-06-21
  • Java之jpa的示例分析
    这篇文章给大家分享的是有关Java之jpa的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JPA快速入门介绍一:什么是JPAJPA的英文全称是Java PersistenceAPI, 目的是给Java开发...
    99+
    2023-06-20
  • Spring Data Jpa框架最佳实践示例
    目录前言扩展接口用法SPRING DATA JPA最佳实践一、继承SIMPLEJPAREPOSITORY实现类二、集成QUERYDSL结构化查询1、快速集成2、丰富BaseJpaRe...
    99+
    2024-04-02
  • 在Spring Boot中使用Spring-data-jpa实现分页查询
    在我们平时的工作中,查询列表在我们的系统中基本随处可见,那么我们如何使用jpa进行多条件查询以及查询列表分页呢?下面我将介绍两种多条件查询方式。1、引入起步依赖   <dependency> <gro...
    99+
    2023-05-31
    spring boot data
  • spring结合hibernate示例详解
    单纯Hibernate程序首先是导入hibernate的jar包。 建立用户和用户操作记录实体,Log.Java和User.java。代码如下所示。Log.javaimport java.util.Date; public cla...
    99+
    2023-05-31
    spring hibernate te
  • Spring@value用法示例详解
    目录一、两种使用方法二、配置2.1 @Value(“#{configProperties[‘key’]}”)使用2.1.1配置文件:2...
    99+
    2024-04-02
  • Spring Data JPA 如何使用QueryDsl查询并分页
    目录SpringDataJPA使用QueryDsl查询并分页使用QueryDSLSpring Data JPA 使用QueryDsl查询并分页 QProblemPoint qP...
    99+
    2024-04-02
  • DoytoQuery中的分页排序方案示例详解
    目录引言分页分页接口排序请求对象响应对象小结引言 分页和排序是数据库提供的两项基本的查询功能。 以MySQL为例,一条典型的SQL查询语句如下: SELECT * FROM...
    99+
    2022-12-27
    DoytoQuery分页排序 DoytoQuery排序
  • Spring Data JPA怎么使用QueryDsl查询并分页
    小编给大家分享一下Spring Data JPA怎么使用QueryDsl查询并分页,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Spring Data JPA 使用QueryDsl查询并分页 QProblemPo...
    99+
    2023-06-25
  • Spring @Conditional注解示例详细讲解
    目录前言:示例:标注在方法上:标注在类上:多个条件类:前言: @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。 @...
    99+
    2022-11-13
    Spring @Conditional注解 Spring @Conditional注解使用
  • Spring Data JPA系列QueryByExampleExecutor使用详解
    目录1、QueryByExampleExecutor用法1.1 介绍1.2 QueryByExampleExecutor接口1.3 QueryByExampleExecutor实践1...
    99+
    2024-04-02
  • Spring整合JPA与Hibernate流程详解
    目录设置Spring的配置文件编写范例的Java类编写Customer实体类编写CustomerDao数据访问接口和类编写CustomerService业务逻辑服务接口和类编写测试类...
    99+
    2023-01-09
    Spring整合JPA Spring整合Hibernate
  • spring data jpa开启批量插入、批量更新的示例分析
    这篇文章给大家分享的是有关spring data jpa开启批量插入、批量更新的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。ORM框架,最早我用的是jdbcTemplate,后来用了Mybatis,唯独...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作