Статьи

Разбивка на страницы и сортировка с помощью Spring Data JPA

Изучите разбиение на страницы и сортировку с помощью Spring Data JPA с примерами кода. Узнайте, как получить разбитые на страницы и отсортированные результаты, используя интерфейс Springs PagingAndSortingRepository.

1 Обзор

При работе с большим количеством данных ленивая обработка часто необходима. Даже если сервис возвращает огромное количество данных, потребитель с меньшей вероятностью использует его. Рассмотрим торговый сайт, где покупатель ищет товар, а на сайте представлены тысячи товаров. Получение тысяч продуктов и их отображение на веб-странице займет очень много времени. В большинстве случаев клиент может даже не смотреть на все продукты.

Для таких случаев используется метод, называемый пагинацией . Сначала отображается только небольшое подмножество продуктов (страница), и покупатель может попросить просмотреть следующее подмножество (страницу) и так далее. Это называется пагинацией.

Хотите узнать, как использовать Java Persistence API (JPA) с Spring и Spring Boot?

Прочитай это:

2 сущность

Для этого урока мы рассмотрим простейший пример сущности « Сотрудник ». Ниже приведен класс сущности Сотрудник .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
@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 Хранилище сотрудников

В статье Методы запросов JPA Spring Data мы уже узнали об интерфейсах репозитория Spring и методах запросов. Здесь мы должны изучить Pagination , поэтому мы будем использовать Spring PagingAndSortingRepository .

1
2
3
4
5
6
7
8
9
@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, который содержит запрос страницы . Давайте посмотрим, как создать запрос страницы.

1
2
Pageable pageable = PageRequest.of(0, 10);
Page<Employee> page = employeeRepository.findAll(pageable);

В первой строке мы создали запрос страницы из 10 сотрудников и запросили первую (0) страницу. Страница запрашивает переданную функцию findAll для получения Страницы сотрудников в качестве ответа.

Если мы хотим получить доступ к следующему набору последующих страниц, мы можем каждый раз увеличивать номер страницы.

1
2
3
4
PageRequest.of(1, 10);
PageRequest.of(2, 10);
PageRequest.of(3, 10);
...

5 сортировка

Spring Data JPA предоставляет объект Sort для обеспечения механизма сортировки. Давайте рассмотрим способы сортировки.

1
2
3
employeeRepository.findAll(Sort.by("fistName"));
  
employeeRepository.findAll(Sort.by("fistName").ascending().and(Sort.by("lastName").descending());

Очевидно, что первый просто сортирует по «firstName», а второй сортирует по «firstName» по возрастанию и «lastName» по убыванию.

Разбивка на страницы и сортировка вместе

1
2
3
4
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 срез против страницы

В EmployeeRepository мы видели, что один метод возвращает Slice, а другой возвращает Page . Оба они являются Spring Data JPA , где Page является подчиненным интерфейсом Slice . Оба они используются для хранения и возврата подмножества данных. Давайте посмотрим на них один за другим

Ломтик

Срез знает, имеет ли он содержимое, является ли он первым или последним срезом. Он также может возвращать Pageable, используемый в текущем и предыдущем срезах. Давайте посмотрим на некоторые важные методы Slice .

01
02
03
04
05
06
07
08
09
10
11
12
13
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 .

1
2
3
4
5
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 Резюме

В этой статье JPA «Разбивка на страницы и сортировка с использованием Spring Data» мы узнали, почему требуется разбивка на страницы Мы узнали, как разбивать на страницы, а также сортировать подмножества данных. Мы также видели интерфейсы Slice и Page и их различия.

Смотрите оригинальную статью здесь: разбиение на страницы и сортировка с помощью Spring Data JPA

Мнения, высказанные участниками Java Code Geeks, являются их собственными.