junior
Что такое query methods в Spring Data?
Query methods (derived queries) – механизм автоматической генерации SQL-запросов на основе имени метода в интерфейсе репозитория. Spring Data анализирует имя метода и создаёт соответствующий JPQL-запрос.
Основные ключевые слова
Пример
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email); // WHERE email = ?
List<User> findByFirstNameAndLastName(String fn, String ln); // AND
List<User> findByAgeGreaterThan(int age); // WHERE age > ?
List<User> findByAgeBetween(int from, int to); // BETWEEN
List<User> findByEmailContaining(String fragment); // LIKE %?%
List<User> findByStatusIn(Collection<String> statuses); // IN
List<User> findByDeletedFalse(); // WHERE deleted = false
List<User> findByEmailIsNull(); // IS NULL
List<User> findByStatusOrderByLastNameAsc(String status); // ORDER BY
Optional<User> findFirstByOrderByCreatedAtDesc(); // LIMIT 1
List<User> findTop5ByStatusOrderByCreatedAtDesc(String s); // TOP 5
long countByStatus(String status); // COUNT
boolean existsByEmail(String email); // EXISTS
void deleteByStatus(String status); // DELETE
}
Вложенные свойства
Пример
// Навигация по связям: user.address.city
List<User> findByAddressCity(String city);
// Разрешение неоднозначности через _
List<User> findByAddress_City(String city);
Пагинация в query methods
Пример
Page<User> findByStatus(String status, Pageable pageable);
Slice<User> findByStatus(String status, Pageable pageable);
List<User> findByStatus(String status, Sort sort);
На собеседовании: покажите знание основных ключевых слов и навигации по связям. Частая ошибка – создавать слишком длинные имена методов. Если имя становится нечитаемым, лучше использовать
@Query.