Spring Boot
Теория: Возможности JPA Repository
В этом уроке мы подробнее обсудим JpaRepository — он устроен интереснее, чем может показаться на первый взгляд. С одной стороны, он предоставляет множество полезных встроенных методов, а с другой — поддерживает автоматическую генерацию кастомных методов для извлечения данных. Далее мы разберем эти возможности.
CRUD-операции
Сюда входит базовый набор методов для создания, обновления, удаления и выборки данных:
-
Метод
S save(S entity)сохраняет данные в базу: -
Метод
Optional<T> findById(ID id)извлекает сущность поid: -
Метод
List<T> findAll()возвращает список всех сущностей, что полезно для справочников и других небольших таблиц: -
Метод
long count()возвращает количество сущностей, то есть записей в таблице: -
Метод
void deleteById(ID id)удаляет сущность (запись в базе) по id -
Метод
void delete(T entity)удаляет переданную сущность из базы данных:
Derived Query Methods
Одна из типовых задач — это выборка по определенному полю или набору полей. Spring Data JPA автоматически генерирует методы, выполняющие подобные выборки. Для этого надо добавить определение нужного метода или методов:
Кроме точного сопоставления параметров, этот механизм умеет генерировать код для множества других условий. Большая часть из них транслируется в SQL достаточно очевидным образом:
Сортировка
Сортировка данных выполняется с помощью комбинации методов и вложенных классов Sort:
Сортировка по возрастанию выполняется с помощью Sort.Order.asc(), по убыванию — с помощью Sort.Order.desc().
Пагинация
Пагинация — это выборка только определенного среза данных с помощью конструкции LIMIT OFFSET. Это основной способ выборки наборов данных, потому что полные наборы обычно слишком большие — извлекать их целиком неудобно:
Обычно текущая страница приходит как параметр запроса. По умолчанию страница равна единице. Это не совпадает с тем, как работает PageRequest — он отображается напрямую на OFFSET, где базовое значение равно 0. Поэтому для правильной работы пагинации нужно выполнить две задачи:
- Установить
1в качестве значения параметра запросаpageпо умолчанию - При формировании
PageRequestвычитать единицы изpage
Объединение пагинации и сортировки
Если нужно объединить пагинацию и сортировку, можно задавать сортировку через PageRequest. В итоге код будет выглядеть так:
Кастомные запросы
Выше мы перечислили множество разных вариантов. Несмотря на это, в некоторых ситуациях все таки придется написать SQL-код. Чтобы это сделать, нужно добавить определение метода с аннотациями @Param и @Query:
Советуем писать кастомные запросы только тогда, когда не остается другого выбора.



