[JPA] 쿼리 메서드Backend/Spring2022. 12. 8. 16:35
Table of Contents
반응형
Spring Data JPA 쿼리 메서드는 가장 강력한 메서드이며, SQL 쿼리를 작성하지 않고도 데이터베이스에서 레코드를 선택하는 쿼리 메서드를 만들 수 있습니다. 백그라운드에서 Spring Data JPA는 쿼리 메서드를 기반으로 SQL 쿼리를 생성하고 쿼리를 실행합니다.
Entity 필드를 사용하여 Repository에 대한 쿼리 메서드를 생성할 수 있으며 쿼리 메서드 생성을 finder methods(findBy, findAll …)라고도 합니다.
예
findByEmailAddressAndName()
이 쿼리 메서드인 UserRepository 가 있다고 가정합니다.
public interface UserRepository extends Repository<User, Long> {
List<User> findByEmailAddressAndName(String emailAddress, String name);
}
백그라운드에서 Spring Data JPA 는 위의 메서드(findByEmailAddressAndName)에서 JPA 기준 API를 사용하여 쿼리를 생성하지만 기본적으로 다음과 같은 JPQL 쿼리로 변환됩니다.
select u from User u where u.emailAddress = ?1 and u.name = ?2
키워드들
JPA에 대해 지원되는 키워드와 해당 키워드를 포함하는 메서드가 무엇을 의미하는지 설명합니다.
Keyworkd | Sample | JPQL snippet |
And | findByLastnameAndFirstname | … where x.lastname = ?1 and x.firstname = ?2 |
Or | findByLastnameOrFirstname | … where x.lastname = ?1 or x.firstname = ?2 |
Is, Equals | findByFirstname, findByFirstnameIs, findByFirstnameEquals | … where x.firstname = ?1 |
Between | findByStartDateBetween | … where x.startDate between ?1 and ?2 |
LessThan | findByAgeLessThan | … where x.age < ?1 |
LessThanEqual | findByAgeLessThanEqual | … where x.age <= ?1 |
GreaterThan | findByAgeGreaterThan | … where x.age > ?1 |
GreaterThanEqual | findByAgeGreaterThanEqual | … where x.age >= ?1 |
After | findByStartDateAfter | … where x.startDate > ?1 |
Before | findByStartDateBefore | … where x.startDate < ?1 |
IsNull, Null | findByAge(Is)Null | … where x.age is null |
IsNotNull, NotNull | findByAge(Is)NotNull | … where x.age not null |
Like | findByFirstnameLike | … where x.firstname like ?1 |
NotLike | findByFirstnameNotLike | … where x.firstname not like ?1 |
StartingWith | findByFirstnameStartingWith | … where x.firstname like ?1 (parameter bound with appended %) |
EndingWith | findByFirstnameEndingWith | … where x.firstname like ?1 (parameter bound with prepended %) |
Containing | findByFirstnameContaining | … where x.firstname like ?1 (parameter bound wrapped in %) |
OrderBy | findByAgeOrderByLastnameDesc | … where x.age = ?1 order by x.lastname desc |
Not | findByLastnameNot | … where x.lastname <> ?1 |
In | findByAgeIn(Collection ages) | … where x.age in ?1 |
NotIn | findByAgeNotIn(Collection ages) | … where x.age not in ?1 |
True | findByActiveTrue() | … where x.active = true |
False | findByActiveFalse() | … where x.active = false |
IgnoreCase | findByFirstnameIgnoreCase | … where UPPER(x.firstname) = UPPER(?1) |
참고
반응형
'Backend > Spring' 카테고리의 다른 글
[Spring] JPA with Querydsl (0) | 2022.12.14 |
---|---|
[JPA] NamedQuery (0) | 2022.12.09 |
[JPA] @ElementCollection 사용 예 (0) | 2022.12.05 |
[Spring] Swagger Header 설정 방법 (0) | 2022.10.12 |
[JPA] 복합키 사용 (0) | 2022.10.05 |
@고지니어스 :: 규니의 개발 블로그
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!