通过代码示例学习使用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 ,其中PageSlice的子接口。 它们都用于保存和返回数据的子集。 让我们一一看一下

切片

切片知道它是否有内容,无论它是第一个还是最后一个切片。 它还能够返回当前和先前切片中使用的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进行分页和排序的文章中,我们了解了为什么需要分页。 我们学习了如何对数据进行分页和排序。 我们还看到了SlicePage界面及其差异。

翻译自: https://www.javacodegeeks.com/2019/02/pagination-sorting-spring-data-jpa.html

使用Spring Data JPA进行分页和排序相关推荐

  1. spring data jpa实现分页查询功能

    spring data jpa实现分页查询功能 HTML代码部分: // 收派标准信息表格 $('#grid').datagrid( {iconCls : 'icon-forward',fit : t ...

  2. Spring Data JPA和分页

    让我们从支持分页的经典JPA方法开始. 考虑一个简单的域类–一个具有名字,姓氏的"成员". 为了支持在成员列表上进行分页,JPA方法是支持一种查找器,该查找器将获取第一个结果(fi ...

  3. Spring Data JPA使用Sort进行排序(Using Sort)(转)

    通过上一节的学习,我们知道了如何用@Query注解来实现灵活的查询.在上一节的示例中,我也尝试给出简单的排序,通过JPQL语句以及原生SQL来实现的.这样的实现,虽然在一定程度上可以应用,但是灵活度不 ...

  4. Spring Data JPA 分页

    最近在使用Spring Boot 做项目时遇到了关于Spring Data JPA的分页问题,在下面这位大兄弟的博客中有代码实现 LINK: 博客链接 DAO接口: package com.demo. ...

  5. Spring Data JPA 原理与实战第二天 掌握Repoitory和DQM

    02 Spring Data Common 之 Repoitory 如何全面掌握? 通过上一课时,我们知道了 Spring Data 对整个数据操作做了很好的封装,其中 Spring Data Com ...

  6. Spring Data JPA问题汇总

    刚进公司,发现都用的Spring Data JPA,一脸懵,知乎上遇到了一个大佬写的文章,非常详细,分享一下,我把大佬的文章整理了一下格式,比较好看了,原文链接:https://zhuanlan.zh ...

  7. Spring Data JPA 查询方法的命名语法与参数

    3 Spring Data JPA 查询方法的命名语法与参数 在⼯作中,你是否经常为⽅法名的语义.命名规范⽽发愁?是否要为不同的查询条件写各种的 SQL 语句?是否为同⼀个实体的查询,写⼀个超级通⽤的 ...

  8. Spring Data JPA是什么?以及简单的使用(联表查询)

    Spring Data学习网站(下载gitHub工程学习) Spring Boot JPA 使用教程 - fishpro - 博客园 Spring Data JPA是什么?以及相关概述 首先Sprin ...

  9. Spring Data JPA分页查询

    使用Spring Data JPA的朋友,在实际工作中经常需要用到分页查询.下面介绍一个简单的分页查询的例子:查询学生信息,每页10行数据,并按成绩排序.先看数据表: 实现:repo需要继承Pagin ...

最新文章

  1. Android滤镜效果实现及原理分析
  2. Spring常见注解
  3. 在Linux中查看ftp状态,linux中ftp常见操作启动ftp状态,终止ftp会话
  4. Hive 处理 json 的几个函数
  5. vue项目做微信分享功能
  6. ld 命令看内存布局 汇编级调试
  7. 网上阅卷系统服务器,网上阅卷系统是什么?
  8. 检测网站CDN是否生效
  9. Java笔记——Java 实现金额小写转大写
  10. 用diskpart恢复U盘
  11. YOLOv5中autoanchor.py的def metric(k)的r = wh[:, None] / k[None]的理解
  12. Unity 场景练习02 仿风之旅人
  13. java从入门到精通----基础1
  14. 堪称神器的 42 个 Chrome 插件,收藏!
  15. 搭建论坛如何选择服务器
  16. ADI Blackfin DSP处理器-BF533的开发详解23:SDRAM内存的设计和自检(含源代码)
  17. Xscale PXA255处理器与CF卡的接口设计
  18. 该如何选择邮箱注册TikTok,需要注意些什么?
  19. Java工程师学习指南(初级篇)
  20. 服务器数据恢复案例之RAID信息丢失数据恢复

热门文章

  1. 【KMP】子串拆分(ybtoj KMP-4)
  2. 【DP】I Will Like Matrix!
  3. HDU5322 - cdq分治FFT加速dp
  4. 线段树专题-黑白棋盘 BZOJ-1453
  5. 12、play整合Akka
  6. Spark入门(十)之Distinct去重
  7. 常用公有云接入——谷歌
  8. vue-beauty 的v-data-table数据单元不换行
  9. HikariCP-史上最快速的连接池
  10. 三大框架题目整合考试题(含详解)