文档章节

Spring data jpa 分页技术

一万
 一万
发布于 2015/12/28 14:18
字数 791
阅读 3813
收藏 9

今天项目后台需要使用分页技术查询关系库,故搜集了一些资料研究了一下,整理如下:

1、之前的Repository接口都继承了CRUDRepository,如果希望仓库提供分页和排序方法,可以继承接口PagingAndSortingRepository接口。它提供了两个默认方法:

  • findAll(Sort)使用Sort提供的排序指令对所有实体进行排序查询,返回Iterable<T>;
  • findAll(Pageable)使用Pageable中的Sort对象对实体排序查询,并使用Pageable的getPageSize()(每页的元素个数)和getPageNumber()(想要获得的页序号)两个方法返回的值返回分页的对象:Page<T>。

Sort对象指定了对实体的哪几个属性进行排序,和排序方向(ASC默认升序,DESC降序);Page<T>很强大,不仅包含了数据本身,还包含是不是第一页或是不是最后一页以及一共多少页等。


2、如果不使用上述函数,我们的Repository不必继承PagingAndSortingRepository接口。可以像之前那样继承CRUDRepository,在需要使用分页技术的函数中添加一个Pageable参数,并把返回值设为Page<T>即可。例如

Page<T> findByAddress(String address, Pageable page);

或者加入Sort参数,把返回值设置为Iterable<T>。


3、在Web应用中,通常不需要自己创建Pageable对象,Spring Data提供了两个HandlerMethodArgumentResolver实现:

PageableHandlerMethodArgumentResolver和SortHandlerMethodArgumentResolver,它们可以将HTTP请求参数转换为Pageable和Sort对象。

我使用的是编程的方式配置spring,在相应的WebMvcConfigurerAdapter继承类上使用@EnableSpringDataWebSupport注解,它将注册上文提到的两个MethodArgumentResolver,用于将请求参数转换为Pageable和Sort对象。

通过@EnableSpringDataWebSupport注解注册的两个bean包含了一些默认设置,包括解析的参数名称等。如果这些不满足需求,可以去掉该注解,覆盖WebMvcConfigurerAdapter的addArgumentResolvers(List<HandlerMethodArgumentResolver>)方法,自己创建上述两个Resolver并设置他们的属性,具体配置参考Spring data API吧。


4、最后是参数转换规则,默认的Pageable pageNumber属性对应的参数名是page(页数从0开始,即page=2查询的是第三页), pageSize对应的参数名是size,Sort对象对应的参数名是sort。经过我自己测试sort参数的格式是 “属性名,...,ASC/DESC”。即前面指定一个或者多个排序的属性,最后指定方向,都用逗号分隔,如果不指定排序方向默认是ASC。可能有些抽象,来看一个例子:

对于User实体,每页10个User,查询第3页,按id属性降序排列的参数可以这么写:

......../users?size=10&page=2&sort=id,desc


后记:上网搜集资料时发现,讨论分页技术的相关文章不是很多且大多数不够深入,用编程方式配置Spring的更是少之又少。像是sort参数的格式,没有找到相关的文章、API中也没找到,是自己试出来的,写的不一定全面,欢迎大家在帖子下面讨论一下,相互学习。

© 著作权归作者所有

共有 人打赏支持
一万
粉丝 29
博文 102
码字总数 173386
作品 0
朝阳
程序员
私信 提问
加载中

评论(1)

独孤小败
独孤小败
👍
Spring Boot [组件学习-Spring Data JPA]

导读: 在上篇文章中对Spring MVC常用的一些注解做了简要的说明,在这篇文章中主要对Spring Data JPA 做一个简要的说明,并附有一个简单的例子,可以体会到Spring Data JPA 的强大之处。 Sp...

yangrd
08/27
0
0
(入门帖)使用 Spring Data JPA 简化 JPA 开发

本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例;接着重构该示例,并引入 Spring 框架,这两部分...

阿莱倪士
2014/01/09
0
0
Spring Data JPA: 分页和排序实战

之前我们学习了使用Jpa访问关系型数据库 通过Jpa大大简化了我们对数据库的开发工作。但是,之前的例子中我们只提到了最简单的CRUD。 实际上,Spring Data Jpa对于分页以及排序的查询也有着完...

一生只为虞美人
07/25
0
0
解决spring jpa中配置文件报'jpa:repositories'的问题

一、问题描述 使用spring jpa,报no declaration can be found for element 'jpa:repositories'错误的解决方案 Multiple annotations found at this line: - cvc-complex-type.2.4.c: The mat......

cloud-coder
2014/04/17
0
1
SpringBoot | 第三十章:Spring-data-jpa的集成和使用

前言 在前面的第九章:Mybatis-plus的集成和使用章节中,介绍了使用框架进行数据库的访问。今天,我们来简单学习下如何使用进行数据库的访问。由于本人未使用过,也是趁着写博文的机会查阅了...

oKong
10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kylin2.5.0环境搭建及操作记录

Apache Kylin是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的H...

PeakFang-BOK
6分钟前
0
0
SpringBoot整合es

文档对像 @Document(indexName = "bigdata",type = "tag")public class User { @Idprivate String openid; private List<String> tags;public String getOpenid() ......

魔法王者安琪拉
10分钟前
0
0
windows下让 jar 在后台运行的办法

windows下 运行 java jar 不出现 命令行 窗口 新建一个披处理 run.bat,内容如下 @echo off start javaw -jar xx.jar exit 双击运行即可。...

glen_xu
19分钟前
1
0
jdk1.8 lambda stream 指定的对象属性进行去重

原因:因为Stream提供的distinct()方法只能去除重复的对象,无法根据指定的对象属性进行去重,可以应付简单场景。 解决方案: //去重,共同信息保存到bizPledgeSupplierVOs里bizPledgeSupp...

INSISTQIAO
21分钟前
0
0
vue nextTick深入理解---vue性能优化、DOM更新时机、事件循环机制

定义[nextTick、事件循环] nextTick的由来: 由于vue的数据驱动视图更新是异步的,即修改数据的当下,视图不会立即更新,而是等同一事件循环中的所有数据变化完成之后再统一进行视图更新。...

JamesView
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部