使用Spring Data JPA进行分页和排序
通过代码示例学习使用Spring Data JPA进行分页和排序 。 了解如何使用Springs PagingAndSortingRepository接口获取分页和排序结果。
1概述
在处理大量数据时,惰性处理通常是必不可少的。 即使服务返回了大量数据,消费者也不太可能使用它。 考虑一个购物网站,客户在其中搜索产品,并且该网站有数千种产品要显示。 获取数千种产品并将其显示在网页上将非常耗时。 在大多数情况下,客户甚至可能不会查看所有产品。
对于这种情况,使用了称为分页的技术。 最初只显示一小部分产品(页面),客户可以要求查看下一个子集(页面),依此类推。 这称为分页。
是否想通过Spring和Spring Boot学习使用Java Persistence API(JPA)?
读这个:
- 使用Spring Data JPA的Spring Boot
- 具有@EmbeddedId的Spring Data JPA复合密钥
- 通过@EmbeddedId部分找到Spring Data JPA
- Java Persistence API指南
- Spring Data JPA查询方法
2实体
在本教程中,我们将考虑“ Employee ”实体的最简单示例。 下面是Employee实体类。
@Entity
public class Employee {@Id private Long name;private String firstName;private String lastName;private Date dateOfBirth;private Integer age;private String designation;private double salary;private Date dateOfJoining;public Long getName() {return name;}public void setName(Long name) {this.name = name;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public Date getDateOfBirth() {return dateOfBirth;}public void setDateOfBirth(Date dateOfBirth) {this.dateOfBirth = dateOfBirth;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getDesignation() {return designation;}public void setDesignation(String designation) {this.designation = designation;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public Date getDateOfJoining() {return dateOfJoining;}public void setDateOfJoining(Date dateOfJoining) {this.dateOfJoining = dateOfJoining;}
}
3员工资料库
在Spring Data JPA查询方法一文中 ,我们已经了解了Spring存储库接口和查询方法。 在这里,我们必须学习Pagination ,因此我们将使用Spring的PagingAndSortingRepository 。
@Repository
public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Long> {Page<Employee> findAll(Pageable pageable);Page<Employee> findByFirstName(String firstName, Pageable pageable);Slice<Employee> findByFirstNameAndLastName(String firstName, String lastName, Pageable pageable);
}
4分页
看一下EmployeeRepository ,该方法接受Pageable参数。 Pageable是Spring定义的接口,其中包含Page请求。 让我们看看如何创建页面请求。
Pageable pageable = PageRequest.of(0, 10);
Page<Employee> page = employeeRepository.findAll(pageable);
在第一行中,我们创建了一个10名员工的Page请求,并请求了第一(0)页。 该页面请求传递给findAll的页面以获取雇员页面作为响应。
如果要访问下一组后续页面,则可以每次增加页码。
PageRequest.of(1, 10);
PageRequest.of(2, 10);
PageRequest.of(3, 10);
...
5排序
Spring Data JPA提供了一个Sort对象,以便提供一种排序机制。 让我们看一下排序的方式。
employeeRepository.findAll(Sort.by("fistName"));employeeRepository.findAll(Sort.by("fistName").ascending().and(Sort.by("lastName").descending());
显然,第一个简单地按“ firstName”排序,而另一个按“ firstName”升序和“ lastName”降序排序。
分页和排序在一起
Pageable pageable = PageRequest.of(0, 20, Sort.by("firstName"));Pageable pageable = PageRequest.of(0, 20, Sort.by("fistName").ascending().and(Sort.by("lastName").descending());
6 Slice vs Page
在EmployeeRepository中,我们看到其中一个方法返回Slice ,另一个方法返回Page 。 它们都是Spring Data JPA ,其中Page是Slice的子接口。 它们都用于保存和返回数据的子集。 让我们一一看一下
切片
切片知道它是否有内容,无论它是第一个还是最后一个切片。 它还能够返回当前和先前切片中使用的Pageable 。 让我们看一下Slice的一些重要方法。
List<T> getContent(); // get content of the slicePageable getPageable(); // get current pageableboolean hasContent(); boolean isFirst();boolean isLast();Pageable nextPageable(); // pageable of the next slicePageable previousPageable(); // pageable of the previous slice
页
该页面是Slice的子接口,并具有几个其他方法。 它知道表中的总页数以及记录的总数。 以下是Page中的一些重要方法。
static <T> Page<T> empty; //create an empty pagelong getTotalElements(); // number of total elements in the tableint totalPages() // number of total pages in the table
7小结
在这篇使用Spring Data JPA进行分页和排序的文章中,我们了解了为什么需要分页。 我们学习了如何对数据进行分页和排序。 我们还看到了Slice和Page界面及其差异。
翻译自: https://www.javacodegeeks.com/2019/02/pagination-sorting-spring-data-jpa.html
使用Spring Data JPA进行分页和排序相关推荐
- spring data jpa实现分页查询功能
spring data jpa实现分页查询功能 HTML代码部分: // 收派标准信息表格 $('#grid').datagrid( {iconCls : 'icon-forward',fit : t ...
- Spring Data JPA和分页
让我们从支持分页的经典JPA方法开始. 考虑一个简单的域类–一个具有名字,姓氏的"成员". 为了支持在成员列表上进行分页,JPA方法是支持一种查找器,该查找器将获取第一个结果(fi ...
- Spring Data JPA使用Sort进行排序(Using Sort)(转)
通过上一节的学习,我们知道了如何用@Query注解来实现灵活的查询.在上一节的示例中,我也尝试给出简单的排序,通过JPQL语句以及原生SQL来实现的.这样的实现,虽然在一定程度上可以应用,但是灵活度不 ...
- Spring Data JPA 分页
最近在使用Spring Boot 做项目时遇到了关于Spring Data JPA的分页问题,在下面这位大兄弟的博客中有代码实现 LINK: 博客链接 DAO接口: package com.demo. ...
- Spring Data JPA 原理与实战第二天 掌握Repoitory和DQM
02 Spring Data Common 之 Repoitory 如何全面掌握? 通过上一课时,我们知道了 Spring Data 对整个数据操作做了很好的封装,其中 Spring Data Com ...
- Spring Data JPA问题汇总
刚进公司,发现都用的Spring Data JPA,一脸懵,知乎上遇到了一个大佬写的文章,非常详细,分享一下,我把大佬的文章整理了一下格式,比较好看了,原文链接:https://zhuanlan.zh ...
- Spring Data JPA 查询方法的命名语法与参数
3 Spring Data JPA 查询方法的命名语法与参数 在⼯作中,你是否经常为⽅法名的语义.命名规范⽽发愁?是否要为不同的查询条件写各种的 SQL 语句?是否为同⼀个实体的查询,写⼀个超级通⽤的 ...
- Spring Data JPA是什么?以及简单的使用(联表查询)
Spring Data学习网站(下载gitHub工程学习) Spring Boot JPA 使用教程 - fishpro - 博客园 Spring Data JPA是什么?以及相关概述 首先Sprin ...
- Spring Data JPA分页查询
使用Spring Data JPA的朋友,在实际工作中经常需要用到分页查询.下面介绍一个简单的分页查询的例子:查询学生信息,每页10行数据,并按成绩排序.先看数据表: 实现:repo需要继承Pagin ...
最新文章
- Android滤镜效果实现及原理分析
- Spring常见注解
- 在Linux中查看ftp状态,linux中ftp常见操作启动ftp状态,终止ftp会话
- Hive 处理 json 的几个函数
- vue项目做微信分享功能
- ld 命令看内存布局 汇编级调试
- 网上阅卷系统服务器,网上阅卷系统是什么?
- 检测网站CDN是否生效
- Java笔记——Java 实现金额小写转大写
- 用diskpart恢复U盘
- YOLOv5中autoanchor.py的def metric(k)的r = wh[:, None] / k[None]的理解
- Unity 场景练习02 仿风之旅人
- java从入门到精通----基础1
- 堪称神器的 42 个 Chrome 插件,收藏!
- 搭建论坛如何选择服务器
- ADI Blackfin DSP处理器-BF533的开发详解23:SDRAM内存的设计和自检(含源代码)
- Xscale PXA255处理器与CF卡的接口设计
- 该如何选择邮箱注册TikTok,需要注意些什么?
- Java工程师学习指南(初级篇)
- 服务器数据恢复案例之RAID信息丢失数据恢复