Gymterview
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.