Этот вопрос проверяет знание возможностей Spring Data JPA и понимание того, как генерируются запросы без написания SQL.
Derived query methods — это методы репозитория, запросы для которых Spring строит автоматически по имени метода. Разработчику не нужно писать SQL или JPQL. Название метода описывает условие поиска. Это ускоряет разработку и снижает количество шаблонного кода.
Spring Data JPA умеет анализировать имена методов и на их основе строить SQL-запросы.
Определение:
Derived query method — это метод репозитория, SQL-запрос которого формируется автоматически на основе его имени.
Spring анализирует части имени метода:
findBy — операция поиска
имя поля сущности
условие (Equals, GreaterThan, Like и т.д.)
public interface UserRepository extends JpaRepository<User, Long> {
User findByName(String name);
List<User> findByAgeGreaterThan(int age);
}
В этом случае Spring сам создаст соответствующие SQL-запросы.
Можно использовать:
логические операции (And, Or)
сравнения (GreaterThan, LessThan)
проверки на null
сортировку (OrderBy)
Derived query methods удобны, но:
плохо читаются при сложной логике
не подходят для сложных JOIN
приводят к длинным именам методов
Derived query methods отлично подходят для простых запросов. Для сложных сценариев лучше использовать JPQL или native SQL.