Запросы
Запрос из имени метода
Базового 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, пытаться закодировать всё в названии метода уже неудобно. Для таких случаев лучше перейти к явному запросу.