Pagination и Sorting

Базовый Spring
≈ 1 мин чтения

Не загружать всё сразу

Если таблица содержит тысячи записей, метод, который всегда возвращает полный список, быстро становится неудобным. 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) означает первую страницу, а не «страницу номер ноль» в пользовательском интерфейсе.