Изучите разбиение на страницы и сортировку с помощью Spring Data JPA с примерами кода. Узнайте, как получить разбитые на страницы и отсортированные результаты, используя интерфейс Springs PagingAndSortingRepository.
1 Обзор
При работе с большим количеством данных ленивая обработка часто необходима. Даже если сервис возвращает огромное количество данных, потребитель с меньшей вероятностью использует его. Рассмотрим торговый сайт, где покупатель ищет товар, а на сайте представлены тысячи товаров. Получение тысяч продуктов и их отображение на веб-странице займет очень много времени. В большинстве случаев клиент может даже не смотреть на все продукты.
Для таких случаев используется метод, называемый пагинацией . Сначала отображается только небольшое подмножество продуктов (страница), и покупатель может попросить просмотреть следующее подмножество (страницу) и так далее. Это называется пагинацией.
Хотите узнать, как использовать Java Persistence API (JPA) с Spring и Spring Boot?
Прочитай это:
- Spring Boot с Spring Data JPA
- Составной ключ Spring Data JPA с @EmbeddedId
- Spring Data JPA найден @EmbeddedId Частично
- Руководство по API персистентности Java
- Методы запроса JPA Spring Data
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, являются их собственными. |