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);