使用Spring Data JPA进行分页和排序

本文详细介绍了如何使用Spring Data JPA进行分页和排序,通过PagingAndSortingRepository接口实现数据的懒加载。示例展示了如何创建Pageable请求、使用Sort对象进行排序,同时对比了Slice和Page的区别。
摘要由CSDN通过智能技术生成

通过代码示例学习使用Spring Data JPA进行分页和排序 。 了解如何使用Springs PagingAndSortingRepository接口获取分页和排序结果。

1概述

在处理大量数据时,惰性处理通常是必不可少的。 即使服务返回了大量数据,消费者也不太可能使用它。 考虑一个购物网站,客户在其中搜索产品,并且该网站有数千种产品要显示。 获取数千种产品并将其显示在网页上将非常耗时。 在大多数情况下,客户甚至可能不会查看所有产品。

对于这种情况,使用了称为分页的技术。 最初只显示一小部分产品(页面),客户可以要求查看下一个子集(页面),依此类推。 这称为分页。

是否想通过Spring和Spring Boot学习使用Java Persistence API(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 slice
 
Pageable getPageable(); // get current pageable
 
boolean hasContent(); 
 
boolean isFirst();
 
boolean isLast();
 
Pageable nextPageable(); // pageable of the next slice
 
Pageable previousPageable(); // pageable of the previous slice

页面Slice的子接口,并具有几个其他方法。 它知道表中的总页数以及记录的总数。 以下是Page中的一些重要方法。

static <T> Page<T> empty; //create an empty page
 
long getTotalElements(); // number of total elements in the table
 
int 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值