Derived Query Methods

날아올라돼지야·2024년 9월 7일

스프링 ORM 기초

목록 보기
9/12

이번 강의에서는 Spring Data JPADerived Query Methods를 심층적으로 다루며, 이 기능이 어떻게 활용되는지, 그리고 실제 프로젝트에서 복잡한 쿼리를 작성할 때 어떤 형식과 구조를 따르는지를 설명합니다.


과정별 정리

1. Derived Query Method 구성 요소

Derived Query Methods는 메서드 이름을 통해 SQL 쿼리를 생성하며, 메서드 이름은 두 가지 주요 구성 요소로 이루어집니다:
1. Introducer: 쿼리의 동작을 정의 (ex. find, read, get, query, count 등).
2. Criteria: 조건을 정의하며, By 키워드를 기준으로 Introducer와 Criteria를 구분.

예:

findByLastName(String lastName);
  • Introducer: find
  • Criteria: ByLastName

2. Introducer 키워드

  • findBy, readBy, getBy, queryBy: 모두 동일하게 작동하며, 데이터를 검색하는 동작을 지시합니다.
  • countBy: 데이터의 개수를 반환.
  • findDistinctBy: DISTINCT 키워드를 사용해 중복을 제거한 결과를 반환.

3. Criteria 키워드

Criteria는 주로 컬럼 이름과 연관된 조건을 포함하며, 여러 조건을 사용할 수 있습니다. 조건을 연결할 때 and 또는 or를 사용할 수 있으며, 2~3개의 조건으로 제한하는 것이 권장됩니다.

예:

findByEmailAndLastName(String email, String lastName);

4. 자주 사용하는 키워드와 그 역할

  • Is 또는 Equals: 특정 값과 같은 데이터를 찾음. (findByFirstNameEquals(String firstName))
  • Between: 두 값 사이에 있는 데이터를 찾음. (findByStartDateBetween(Date start, Date end))
  • LessThan, GreaterThan: 특정 값보다 작거나 큰 데이터를 찾음. (findByAgeLessThan(int age))
  • IsNull, IsNotNull: 값이 null인지 또는 null이 아닌 데이터를 찾음.
  • Like: 패턴 매칭 쿼리. (findByFirstNameLike(String namePattern))
  • StartingWith, EndingWith, Containing: 특정 문자열로 시작하거나 끝나는 데이터를 찾음.
  • OrderBy: 특정 컬럼을 기준으로 정렬. (findByAgeOrderByLastNameDesc(int age))
  • True, False: Boolean 값을 기반으로 필터링. (findByActiveTrue())
  • IgnoreCase: 대소문자를 무시하고 필터링. (findByFirstNameIgnoreCase(String firstName))

예제와 소스코드

1. 기본 예제: findByStatus

ContactRepository.java

@Repository
public interface ContactRepository extends CrudRepository<Contact, Integer> {
    List<Contact> findByStatus(String status);
}
  • findByStatusstatus 필드를 기준으로 메시지를 필터링하는 메서드입니다.

2. 여러 조건 사용: findByEmailAndLastName

UserRepository.java

@Repository
public interface UserRepository extends CrudRepository<User, Long> {
    List<User> findByEmailAndLastName(String email, String lastName);
}
  • findByEmailAndLastNameemaillastName을 동시에 만족하는 데이터를 검색합니다.

3. 정렬 예제: findByAgeOrderByLastNameDesc

PersonRepository.java

@Repository
public interface PersonRepository extends CrudRepository<Person, Long> {
    List<Person> findByAgeOrderByLastNameDesc(int age);
}
  • age 필드로 필터링하고, lastName을 기준으로 내림차순 정렬.

4. Boolean 필터링 예제: findByActiveTrue

TaskRepository.java

@Repository
public interface TaskRepository extends CrudRepository<Task, Long> {
    List<Task> findByActiveTrue();
}
  • activetrue인 데이터를 검색.

중요한 자료 요약

  1. Derived Query Methods 사용법

    • findBy, readBy, getByIntroducer를 사용하여 데이터를 검색하는 동작을 지시.
    • By 키워드를 기준으로 쿼리 조건인 Criteria를 설정.
    • Criteria는 주로 컬럼 이름과 연관되며, 여러 조건을 연결할 때 and, or를 사용할 수 있음.
  2. 자주 사용하는 키워드

    • Equals, Is, Between, Like, OrderBy 등 다양한 키워드를 사용해 SQL 쿼리를 쉽게 작성할 수 있음.

결론

Derived Query MethodsSpring Data JPA의 강력한 기능 중 하나로, 메서드 이름만으로 복잡한 SQL 쿼리를 자동 생성할 수 있습니다. 이 기능을 활용하면 개발자는 코드 작성을 최소화하고, 직관적으로 쿼리를 정의할 수 있습니다. 추가적인 커스텀 쿼리가 필요한 경우, 향후 다른 방법을 사용할 수 있습니다.

profile
무슨 생각하며 사니

0개의 댓글