При разработке любого API загрузки Spring мы создаем много конечных точек отдыха для операции CRUD с данными. Через некоторое время, когда в БД вставляется большое количество записей, извлечение записей из БД занимает больше времени, потому что оно извлекает все записи.

Чтобы решить эту проблему, есть несколько способов, таких как:

  1. У нас могут быть фильтры в наших запросах, которые получают данные.
  2. Мы можем установить предел
  3. У нас может быть разбиение на страницы

Итак, в этом посте мы обсудим разбиение на страницы и когда оно необходимо.

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

Подобным образом для сортировки мы также можем сортировать данные на стороне пользовательского интерфейса, но это будет плохой идеей из-за производительности, поэтому мы можем сортировать их из бэкэнда, просто передавая имена столбцов, по которым мы хотим сортировать записи.

Разработка с использованием Spring Boot

Теперь в части разработки мы выполним следующие шаги:

  1. Создайте проект весенней загрузки из весеннего инициализатора
  2. Создавайте различные пакеты, такие как (сущность, модель, репозиторий, сервис, контроллер, конфигурация, утилита и т. д.)
  3. Создайте несколько грубых конечных точек (например, создайте пользователя, получите всех пользователей)

Пейджинг:

В весенней загрузке для реализации подкачки и сортировки нам нужно расширить PagingAndSortingRepository в нашем интерфейсе UserRepository.

PagingAndSortingRepository is an extension of CrudRepository.
PagingAndSortingRepository has two methods like 
Page<T> findAll(Pageable pageable);
Iterable<T> findAll(Sort sort);

Теперь метод findAll() будет принимать Pageable в качестве аргумента. PageRequest реализует Pageable.

От контроллера мы отправим запрос, подобный этому

Теперь для тестирования мы можем получить этот URL от почтальона.

http://localhost:8083/api/user?pageNo=0&pageSize=5

Номер страницы начинается с нуля. Размер страницы — количество записей на странице. Иногда пользователь не хочет передавать эти значения из URL-адреса, поэтому я добавил значения по умолчанию.

Сортировка:

Мы также можем применять пейджинг и сортировку вместе, а также по одному.

Приведенный выше пример касается только пейджинга. Далее пейджинг и сортировка вместе. порядок сортировки по умолчанию — по убыванию.

PageRequest pageRequest = PageRequest.of(pageNo, pageSize, Sort.by("name").ascending());

Для сортировки, как мы видели, у PagingAndSortingRepository есть один метод findAll(), который принимает Sort-Object в качестве аргумента. Для сортировки нам нужно выбрать, по какому свойству мы хотим отсортировать наши результаты, мы также можем выбрать несколько свойств. например

Sort nameSort = Sort.by("name");
Sort emailSort = Sort.by("email");

Sort multiSort = emailSort.and(nameSort);

List<EmployeeEntity> result = repository.findAll(multiSort);

Срез:

Слайс похож на страницу, разница только в том, что при использовании страницы у него есть дополнительные данные, такие как первая страница, общая страница, номер страницы и количество, поэтому вычисление этого занимает дополнительное время внутри. тогда как Slice имеет только данные и никакой дополнительной информации, поэтому с точки зрения производительности это лучше.

@Repository
public interface UserRepository extends CrudRepository<User, Integer> {

    public Slice<User> findByEmail(String email, Pageable pageable);
}
In Service layer Method:
Slice<User> result = userRepository.findByEmail("[email protected]", paging);

Итак, это все о разбиении по страницам и сортировке с использованием Spring Boot. Это очень полезно при выполнении проектов, а также для интервью.

Итак, я надеюсь, что теперь вы поняли, как использовать его в проектах. Если есть сомнения, дайте мне знать.

Вы можете проверить код на Github.

Спасибо за прочтение!!

ЛинкедИн