Запросы

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

Запрос из имени метода

Базового CRUD хватает не всегда. Часто приложению нужно найти данные по какому-то свойству: например, клиента по email или только активных клиентов. Spring Data JDBC умеет строить запрос для многих простых случаев по имени метода репозитория.

interface CustomerRepository extends CrudRepository<Customer, Long> {
    Optional<Customer> findByEmail(String email);

    List<Customer> findByActiveOrderByNameAsc(boolean active);
}

В первом методе часть findByEmail указывает условие по свойству email. Во втором к условию по active добавляется сортировка по name. Spring разбирает имя метода и строит соответствующий запрос во время работы репозитория.

Когда имя метода остаётся хорошим API

Derived query удобен, пока его имя читается как нормальная фраза и отражает один понятный запрос. Если условия становятся длинными, появляются сложные выражения или специфический SQL, пытаться закодировать всё в названии метода уже неудобно. Для таких случаев лучше перейти к явному запросу.

Имя метода зависит от имён свойств Java-модели. Если переименовать свойство сущности, derived query тоже нужно проверить и при необходимости переименовать.