Pagination и Sorting
Не загружать всё сразу
Если таблица содержит тысячи записей, метод, который всегда возвращает полный список, быстро становится неудобным.
Spring Data умеет передавать в репозиторий объект Pageable:
он описывает номер страницы, её размер и при необходимости сортировку.
interface CustomerRepository extends JpaRepository<Customer, Long> {
Page<Customer> findByActiveTrue(Pageable pageable);
}
Pageable pageable = PageRequest.of(
0,
20,
Sort.by("name").ascending()
);
Page<Customer> page = repository.findByActiveTrue(pageable);
Здесь запрашивается первая страница размером 20 элементов, отсортированная по имени.
Page содержит не только элементы текущей страницы,
но и метаданные: общее число элементов, количество страниц и информацию о соседних страницах.
Page, Slice и Sort
Когда общее количество записей действительно нужно интерфейсу, удобен Page.
Если достаточно знать, существует ли следующая порция данных, можно использовать Slice
и не требовать подсчёта всех подходящих строк.
Сортировку можно передавать вместе с Pageable или отдельно через Sort.
PageRequest.of(0, 20) означает первую страницу, а не «страницу номер ноль» в пользовательском интерфейсе.