SpringBoot第二讲 利用Spring Data JPA实现数据库的访问(二)_分页和JpaSpecificationExecutor接口介绍
来源:互联网 发布:商务合作意向书 知乎 编辑:程序博客网 时间:2024/05/03 17:48
我们继续研究spring jpa data,首先看看分页和排序的实现,在原来的代码中,我们如果希望实现分页,首先得创建一个Pager
的对象,在这个对象中记录total(总数),totalPager(总页数),pageSize(每页多少条记录),pageIndex(当前第几页),offset(查询时的offset)
,在spring Data JPA中实现分页需要用到三个接口
- PagingAndSortingRepository
- Pageable
- Page
PagingAndSortingRepository是spring data jpa实现分页的工厂,用法和Repository完全一致,先看看源码
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
第二个findAll
方法就是实现分页的方法,参数是Pageable
类型,同参数传入当前的分页对象(如:第几页,每页多少条记录,排序信息等),查询完成之后会返回一个Page
的对象。Page
对象中就存储了所有的分页信息。Pageable的源码如下
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
Pageable是一个接口,它的实现类是PageRequest
,PageRequest有三个构造方法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
Page
实现了一个Slice的接口,通过这个接口获取排序之后的各个数值,这些方法都比较直观,通过名称就差不多知道该是什么样的一个操作了,大家可以自行查阅一下Page和Slice的源码,这里就不列出了。
接下实现以下分页的操作, 创建一个StudentPageRepository
来实现分页操作。
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
虽然PagingAndSortingRepository接口中只有findAll方法,但是我们依然可以使用Repository中的衍生查询,我们只要把Pageable放到最后一个参数即可。测试代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
分页的方法非常的简单,下面我们来实现一下排序的操作,排序和分页类似,我们需要传递一个Sort对象进去,Sort
是一排序类,首先有一个内部枚举对象Direction
,Direction
中有两个值ASC和DESC
分别用来确定升序还是降序,Sort
还有一个内部类Order
,Order
有有两个比较重要的属性Sort.Direction
和property
,第一个用来确定排序的方向,第二个就是排序的属性。
Sort
有如下几个构造函数
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
看看排序的代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
如果希望在分页的时候进行排序,一样也非常容易,看一下下面PageReques的构造函数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
看到这里我相信大家已经会各种排序操作了,这里就不演示了,但是在实际的开发中我们还需要对排序和分页操作进行一下封装,让操作更方便一些,这个话题我们在后面的章节再来详细介绍。
Spring data jpa 在PagingAndSortingRepository接口下还提供了一个JpaRepository
接口,该接口封装了更常用的一些方法,使用方式都类似,如果将来在实现的过程中没有特殊的需求(如:不希望公开所有接口方法之类的需求),一般都继承JPARepository来操作。
Spring Data Jpa同样提供了类似Hibernated 的Criteria的查询方式,要使用这种方式只要继承JpaSpecificationExecutor
,该接口提供了如下一些方法
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
该接口通过Specification来定义查询条件,很多朋友可能使用的方式都是基于SQL的,对这种方式可能不太习惯,在下一讲中将会对Specification进行一下封装,让查询操作变得更加的简单方便。这里先简单看一下示例。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
使用Specification的要点就是CriteriaBuilder,通过这个对象来创建条件,之后返回一个Predicate对象。这个对象中就有了相应的查询需求,我们同样可以定义多个Specification,之后通过Specifications对象将其连接起来。以下是一个非常典型的应用
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
这个代码生成的sql是select * from t_student where (id=2 or id=3) and (address like 'zt%' and name like 'foo%')
,这其实是一个非常典型的应用,但是相信大家已经发现这个操作实在是太繁杂了,所以个人认为Specification
这个方案其实就是为了让我们对其进行封装,而不是直接使用的。
另外在toPredicate
中还有一个CriteriaQuery
的参数,这个对象提供了更多有用的查询,如分组之类的,可以使用该对象组成复杂的SQL语句来查询,这块内容和具体的封装实现将会在下一章节介绍。
- SpringBoot第二讲利用Spring Data JPA实现数据库的访问(二)_分页和JpaSpecificationExecutor接口介绍
- SpringBoot第二讲 利用Spring Data JPA实现数据库的访问(二)_分页和JpaSpecificationExecutor接口介绍
- SpringBoot第二讲 利用Spring Data JPA实现数据库的访问(二)_分页和JpaSpecificationExecutor接口介绍
- SpringBoot第二讲利用Spring Data JPA实现数据库的访问(一)
- SpringBoot第二讲 利用Spring Data JPA实现数据库的访问(一)
- SpringBoot第二讲 利用Spring Data JPA实现数据库的访问(一)
- SpringBoot第五讲扩展和封装Spring Data JPA(二)_利用Specification封装简单查询
- Spring Data JPA(3)--JpaRepository和JpaSpecificationExecutor的结合使用
- jpa学习5--spring data jpa 中的JpaSpecificationExecutor和PagingAndSortingRepository分页
- springBoot+easyui +spring data JPA 实现分页
- SpringBoot第四讲扩展和封装Spring Data JPA(一)_自定义Repository和创建自己的BaseRepository
- SpringBoot第四讲扩展和封装Spring Data JPA(一)_自定义Repository和创建自己的BaseRepository
- spring data jpa中继承JpaSpecificationExecutor接口的接口不会被IOC容器所管理
- spring data jpa 利用JpaSpecificationExecutor做复杂查询
- spring data jpa 利用JpaSpecificationExecutor做复杂查询
- Spring Data JPA(2)--利用PagingAndSortingRespository实现分页和排序
- SpringBoot之使用Spring-data-jpa更加简单优雅的访问数据库
- 结合SpringDataJPA中的PagingAndSortingRepository和 JpaSpecificationExecutor接口实现大数据量的数据分页查询
- 什么时候使用CountDownLatch
- 直面315,邮件渠道可以做什么?
- Android搜索动画
- 算法竞赛入门经典第三章习题总结(记录向)
- mysql中headler_read计数器理解
- SpringBoot第二讲 利用Spring Data JPA实现数据库的访问(二)_分页和JpaSpecificationExecutor接口介绍
- java提高篇(八)----详解内部类
- NodeMCU入门,烧程序点灯。
- java--什么是多态?
- 如何在万能地图下载器中购买流量下载地图
- 学习笔记:《CSS权威指南》之选择器
- linux下sogou拼音崩溃解决方法
- LightOJ1234Harmonic Number(打表小技巧)
- 以蓝牙开发的视觉解读微信Airsync协议