При разработке любого API загрузки Spring мы создаем много конечных точек отдыха для операции CRUD с данными. Через некоторое время, когда в БД вставляется большое количество записей, извлечение записей из БД занимает больше времени, потому что оно извлекает все записи.
Чтобы решить эту проблему, есть несколько способов, таких как:
- У нас могут быть фильтры в наших запросах, которые получают данные.
- Мы можем установить предел
- У нас может быть разбиение на страницы
Итак, в этом посте мы обсудим разбиение на страницы и когда оно необходимо.
Это требуется везде, где мы показываем данные в табличном формате в пользовательском интерфейсе. Поэтому вместо того, чтобы получать все данные за один раз и показывать только 50 записей, это не очень хорошая идея, вместо этого мы можем использовать разбиение на страницы в таких сценариях и мы можем получить соответствующие данные быстро.
Подобным образом для сортировки мы также можем сортировать данные на стороне пользовательского интерфейса, но это будет плохой идеей из-за производительности, поэтому мы можем сортировать их из бэкэнда, просто передавая имена столбцов, по которым мы хотим сортировать записи.
Разработка с использованием Spring Boot
Теперь в части разработки мы выполним следующие шаги:
- Создайте проект весенней загрузки из весеннего инициализатора
- Создавайте различные пакеты, такие как (сущность, модель, репозиторий, сервис, контроллер, конфигурация, утилита и т. д.)
- Создайте несколько грубых конечных точек (например, создайте пользователя, получите всех пользователей)
Пейджинг:
В весенней загрузке для реализации подкачки и сортировки нам нужно расширить 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.
Спасибо за прочтение!!