BE/Spring
Spring Data Jpa 쿼리 메서드 살펴보기
E@st
2023. 4. 27. 22:57
Spring Data JPA를 이용한 쿼리 메서드에 대해 알아보겠습니다. 레포지토리는 JpaRepository를 상속받는 것만으로도 다양한 CRUD 메서드를 제공합니다. 하지만 기본 메서드들은 식별자 기반으로 생성되어 있기 때문에 결국 별도의 메서드를 정의해서 사용하는 경우가 많습니다.
이때 간단하게 사용할 수 있는것이 쿼리 메서드입니다.
//리턴타입 + {주제 + 속성} 구조의 메소드
List<Person> findByLastnameAndEmail(String lastName,String email);
find...By, exists...By 와 같은 키워드로 쿼리의 주제를 정하며 'By'는 서술어의 시작을 나타내는 구분자 역할을 합니다. 서술어 부분은 검색 및 정렬 조건을 지정하는 영역입니다. 그리고 And,Or을 통한 확장도 할 수 있습니다!
- find By, read By, get By, qeury By, search By, stream By: 조회기능을 수행합니다. 리턴 타입으로는 Collections나 Stream에 속한 하위 타입을 설정 가능합니다.
쿼리 메서드 키워드
FindBy, ReadBy, QueryBy, GetBy | 기본 조회 기능. 속성 값에 따라 엔티티 조회 | Optional<Product> findByNumber(Long number); |
CountBy | 속성 값에 따른 엔티티 수 세기 | long countByName(String name); |
ExistsBy | 속성 값에 따른 엔티티 존재 여부 확인 | boolean existsByNumber(Long number); |
DeleteBy, RemoveBy | 속성 값에 따른 엔티티 삭제 | void deleteByNumber(Long number); |
OrderBy | 속성 값을 기준으로 정렬된 결과 조회 | List<Product> findByNameOrderByNumberAsc(String name); |
Top, First | 최상단 혹은 첫 번째 결과만 조회 | List<Product> findFirstByName(String name); |
Distinct | 중복 제거 후 조회 결과 반환 | List<User> findDistinctByCountry(String country); |
IgnoreCase | 대소문자 구분 없이 속성 값 조회 | List<User> findByFirstNameIgnoreCase(String firstName); |
Is, Equals | 속성 값이 일치하는 경우 조회 | |
Not | 속성 값이 일치하지 않는 경우 조회 | List<User> findByNameNot(String name); |
Like | 속성 값이 유사한 경우 조회 (SQL의 LIKE 연산자 사용) | List<User> findByCityLike(String cityPattern); |
StartingWith, EndingWith, Containing | 문자열 속성 값이 특정 문자열로 시작, 끝나거나 포함하는 경우 조회 | List<User> findByUsernameContaining(String usernameSubstring); |
LessThan, GreaterThan | 속성 값이 특정 값보다 작거나 큰 경우 조회 | |
LessThanEqual, GreaterThanEqual | 속성 값이 특정 값보다 작거나 같거나 크거나 같은 경우 조회 | |
Between | 속성 값이 특정 범위 내에 있는 경우 조회 | List<User> findByDateOfBirthBetween(LocalDate startDate, LocalDate endDate); |
IsNull, IsNotNull | 속성 값이 NULL인 경우 혹은 NULL이 아닌 경우 조회 | |
In, NotIn | 속성 값이 특정 값들 중 하나와 일치하거나 일치하지 않는 경우 조회 | |
True, False | 불리언 속성 값이 true 혹은 false인 경우 조회 | List<User> findByActiveIsTrue(); |
After, Before | 날짜 속성 값이 특정 시점 이후 혹은 이전인 경우 조회 | List<User> findByRegisteredDateAfter(LocalDate date); |