JPA - 스프링 데이터 JPA에서 쿼리 메소드 안에 지원되는 키워드

2021. 11. 17. 16:32 Java 관련/JPA

쿼리 메소드는 스프링 데이터 JPA의 핵심적인 기능중 하나로 메소드 이름으로 쿼리를 생성할 수 있다는 장점이 있다. 메소드 이름으로 쿼리를 생성을 위해 인터페이스에서 사용할 사용자 쿼리 메소드를 정의해 준다. EmailAddress와 LastName의 칼럼을 where 절의 조건으로 질의하는 사용자 쿼리 메소드는 인터페이스에 다음과 같이 선언해 줄 수 있다.

public interface UserRepository extends Repository<User, Long> {
​
  List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}

위와 같이 인터페이스에서 먼저 사용자 쿼리 메서드를 정의해준 다음 인터페이스를 구현하는 서비스에서 구체적인 비즈니스 로직을 추가해 내용을 구현해 줄 수 있다. 쿼리 메소드는 where 절에 들어가는 조건과 관련한 것을 메소드로 지원한다. 쿼리 메소드에 대한 내용들은 별도로 정리하면 다음과 같다.

메소드 이름 안에서 지원되는 키워드

 

KeywordSampleJPQL 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 findByAgeIsNull … 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<Age> ages) … where x.age in ?1
NotIn findByAgeNotIn(Collection<Age> age) … where x.age not in ?1
True findByActiveTrue() … where x.active = true
False findByActiveFalse() … where x.active = false
IgnoreCase findByFirstnameIgnoreCase … where UPPER(x.firstame) = UPPER(?1)



출처: https://happygrammer.tistory.com/158?category=891896 [happygrammer]

'Java 관련 > JPA' 카테고리의 다른 글

QueryDsl 환경설정  (0) 2021.11.17
JPA - 스프링 데이터 JPA  (0) 2021.11.17
JPA - 하이버네이트와 스프링 연동  (0) 2021.11.17
JPA - JPQL과 Criteria 쿼리  (0) 2021.11.17
JPA - 엔티티 매핑  (0) 2021.11.17
JPA - 엔티티 매니저와 트랜잭션  (0) 2021.11.17
JPA에 기반한 비즈니스로직 중심의 S/W 개발  (0) 2021.11.17
JPA 요소  (0) 2021.10.05