文档章节

Spring data jpa 分页技术

一万
 一万
发布于 2015/12/28 14:18
字数 791
阅读 4K
收藏 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中也没找到,是自己试出来的,写的不一定全面,欢迎大家在帖子下面讨论一下,相互学习。

© 著作权归作者所有

一万
粉丝 30
博文 105
码字总数 173706
作品 0
朝阳
程序员
私信 提问
加载中

评论(1)

独孤小败
独孤小败
👍
Spring Boot:整合Spring Data JPA

综合概述 JPA是Java Persistence API的简称,是一套Sun官方提出的Java持久化规范。其设计目标主要是为了简化现有的持久化开发工作和整合ORM技术,它为Java开发人员提供了一种ORM工具来管理J...

朝雨忆轻尘
2019/06/18
0
0
Spring Boot [组件学习-Spring Data JPA]

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

yangrd
2018/08/27
0
0
整合Spring Data JPA与Spring MVC: 分页和排序pageable

https://www.tianmaying.com/tutorial/spring-jpa-page-sort Spring Data Jpa对于分页以及排序的查询也有着完美的支持,接下来,我们来学习如何通过来对数据库进行分页查询。 添加maven依赖 ...

osc_jb8w6ufb
2018/08/03
19
0
SpringBoot学习笔记:Spring Data Jpa的使用

更多请关注公众号 Spring Data Jpa 简介 JPA ()意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR 338,这些接口所在包为,详细内容可参考https://github.com/javaee/jpa-s...

osc_tn1q1y1r
2019/09/26
31
0
Springboot 系列(十)使用 Spring data jpa 访问数据库

前言 Springboot data jpa 和 Spring jdbc 同属于 Spring开源组织,在 Spring jdbc 之后又开发了持久层框架,很明显 Spring data jpa 相对于 Spring jdbc 更加的便捷强大,不然也就没有开发的...

osc_p8erz1zn
2019/03/04
6
0

没有更多内容

加载失败,请刷新页面

加载更多

垃圾收集器与内存分配策略

对象已死? 垃圾标记算法 1.引用计数算法 C++智能指针、Python 2.可达性分析算法 JavaGC Roots的根对象作为起始节点,通过引用链到某个对象不可达时,证明此对象不可能再被使用。 强引用:...

LoSingSang
昨天
27
0
Python--从集合中随机取出一个元素

Python--从集合中随机取出一个元素 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 有时候有一个这样的需求...

归子莫
昨天
27
0
iptables-F 后 SSH 连接断开

最近回收利用一台被征用做邮件服务的服务器,重新部署新的业务。 清理了所有的安装软件和目录文件后,调整了网络安全组规则,仅开放所需端口。 看了下防火墙的配置: # iptables -LChain I...

DEPAKIN
昨天
27
0
IDEA通过Maven打包JavaFX工程(OpenJFX11)

1 概述 最近研究JFX,写出来了但是打包不了,这。。。尴尬。。。 IDEA的文档说只支持Java8打成jar包: 尝试过直接使用Maven插件的package,不行,也尝试过Build Artifacts,也不行,各种奇奇...

氷泠
昨天
19
0
《一天一模式》— 命令模式

一、命令模式的概念 将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 二、什么时候使用命令模式 调用者与实现者通常是一种紧耦合的...

XuePeng77
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部