文档章节

Spring data jpa 分页技术

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

© 著作权归作者所有

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

评论(1)

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

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

yangrd
08/27
0
0
Spring Data JPA: 分页和排序实战

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

一生只为虞美人
07/25
0
0
一步步学习 Spring Data 系列之JPA(一)

大概有半年多没有写博客了,主要是最近忙于工作,也没来得及与大家分享技术。当然现在的技术大多都有人写其博客分享了,也找不到合适写的,所以也就懒得写了。最近在SpringSource上看到了一好...

张廷
2012/07/23
0
3
Spring Data JPA实战视频教程

Spring Data JPA实战视频教程 视频大纲 JPA入门 Spring Data JPA入门 Repository的定义 查询方法的命名策略 JPQL查询,结果映射 Named Query,Named Native Query 排序,分页 JPA Criteria查...

刘宗泽
06/26
0
0
(入门帖)使用 Spring Data JPA 简化 JPA 开发

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

阿莱倪士
2014/01/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
47
0
awk命令扩展使用操作

awk 中使用外部shell变量 示例1 [root@centos01 t1022]# A=888[root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}'888[root@centos01 t1022]# echo "aaaaaaaaaaaaa" | aw......

野雪球
今天
41
0
深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
今天
45
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
今天
40
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
47
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部