Spring Data JPA에서는 Query Method 기능을 이용하여 DB의 쿼리를 작성할 수 있는데
여기서 쿼리 메서드의 Keyword나 조건자의 Keyword에 대해 알아보고, 이를 활용하여 특정 logic의 쿼리 메서드를 만들어보고자 한다.
아래의 사진은 Spring Data JPA Document에서 가져온 것이며,
Table 8. Query subject keywords를 보게되면 여러 종류가 있지만 굉장히 직관적으로 네이밍 되어있음을 알 수 있다.
먼저, 동일한 row에 포함된 keyword들은 동일한 기능을 하며, 기능에 맞춰 원하는 네이밍을 가진 keyword를 선정해서 메서드 이름을 정하면 된다.
또한 ...부분에 속성 값을 작성하면 된다.(비어있더라도 상관 없다)
> 해당 이름을 가지는 user 객체를 출력하려면 findUserByName으로 메서드 이름을 작성하면 된다.
하나하나씩 특징 별로 살펴보자.
find...By
, read...By
, get...By
, query...By
, search...By
, stream...By
를 이용한다.exists...By
를 이용한다.count...By
를 이용한다.delete...By
, remove...By
를 이용한다....First<number>...
, ...Top<number>...
를 이용한다....Distinct...
를 이용한다.Table 9. Query predicate keywords 또한 굉장히 직관적으로 네이밍되어있음을 알 수 있다.
위의 subject keyword를 사용하면서 필요한 predicate keyword를 적절히 사용하면서 쿼리 메소드 네임을 지정하면 된다.
예시로, User 엔티티에서 결과 값을 가져오는 것으로 가정하고 메서드 이름을 작성해보자
- 해당 이름과 이메일을 가진 행을 가져올 때 - findByNameAndEmail
- 이름이 null이 아닌 행을 가져올 때 - findByNameIsNotNull
- id로 내림차순 정렬 후, 이름으로 검색했을 때 가장 상위 행을 가져올 때 - findTop1ByNameOrderByIdDesc
이처럼, 네이밍이 굉장히 직관적이라 쉽게 작성할 수 있을 것이라고 생각한다.