이번 강의에서는 Spring Data JPA의 Derived Query Methods를 심층적으로 다루며, 이 기능이 어떻게 활용되는지, 그리고 실제 프로젝트에서 복잡한 쿼리를 작성할 때 어떤 형식과 구조를 따르는지를 설명합니다.
Derived Query Methods는 메서드 이름을 통해 SQL 쿼리를 생성하며, 메서드 이름은 두 가지 주요 구성 요소로 이루어집니다:
1. Introducer: 쿼리의 동작을 정의 (ex. find, read, get, query, count 등).
2. Criteria: 조건을 정의하며, By 키워드를 기준으로 Introducer와 Criteria를 구분.
예:
findByLastName(String lastName);
findByLastNameDISTINCT 키워드를 사용해 중복을 제거한 결과를 반환.Criteria는 주로 컬럼 이름과 연관된 조건을 포함하며, 여러 조건을 사용할 수 있습니다. 조건을 연결할 때 and 또는 or를 사용할 수 있으며, 2~3개의 조건으로 제한하는 것이 권장됩니다.
예:
findByEmailAndLastName(String email, String lastName);
findByFirstNameEquals(String firstName))findByStartDateBetween(Date start, Date end))findByAgeLessThan(int age))findByFirstNameLike(String namePattern))findByAgeOrderByLastNameDesc(int age))findByActiveTrue())findByFirstNameIgnoreCase(String firstName))ContactRepository.java
@Repository
public interface ContactRepository extends CrudRepository<Contact, Integer> {
List<Contact> findByStatus(String status);
}
findByStatus는 status 필드를 기준으로 메시지를 필터링하는 메서드입니다.UserRepository.java
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
List<User> findByEmailAndLastName(String email, String lastName);
}
findByEmailAndLastName는 email과 lastName을 동시에 만족하는 데이터를 검색합니다.PersonRepository.java
@Repository
public interface PersonRepository extends CrudRepository<Person, Long> {
List<Person> findByAgeOrderByLastNameDesc(int age);
}
TaskRepository.java
@Repository
public interface TaskRepository extends CrudRepository<Task, Long> {
List<Task> findByActiveTrue();
}
Derived Query Methods 사용법
자주 사용하는 키워드
Derived Query Methods는 Spring Data JPA의 강력한 기능 중 하나로, 메서드 이름만으로 복잡한 SQL 쿼리를 자동 생성할 수 있습니다. 이 기능을 활용하면 개발자는 코드 작성을 최소화하고, 직관적으로 쿼리를 정의할 수 있습니다. 추가적인 커스텀 쿼리가 필요한 경우, 향후 다른 방법을 사용할 수 있습니다.