[Spring Data] Spring Data JPA - Query Method 살펴보기

p1atin0uss·2022년 6월 24일
0

JPA

목록 보기
2/3

💡 개요

Spring Data JPA에서는 Query Method 기능을 이용하여 DB의 쿼리를 작성할 수 있는데
여기서 쿼리 메서드의 Keyword나 조건자의 Keyword에 대해 알아보고, 이를 활용하여 특정 logic의 쿼리 메서드를 만들어보고자 한다.




📌 Query subject keyword

특징

아래의 사진은 Spring Data JPA Document에서 가져온 것이며,
Table 8. Query subject keywords를 보게되면 여러 종류가 있지만 굉장히 직관적으로 네이밍 되어있음을 알 수 있다.

먼저, 동일한 row에 포함된 keyword들은 동일한 기능을 하며, 기능에 맞춰 원하는 네이밍을 가진 keyword를 선정해서 메서드 이름을 정하면 된다.

또한 ...부분에 속성 값을 작성하면 된다.(비어있더라도 상관 없다)

> 해당 이름을 가지는 user 객체를 출력하려면 findUserByName으로 메서드 이름을 작성하면 된다.

하나하나씩 특징 별로 살펴보자.


1. 조회

  • find...By , read...By , get...By , query...By , search...By , stream...By 를 이용한다.
  • <T> 타입을 반환한다.

2. 존재 여부

  • exists...By 를 이용한다.
  • boolean 타입을 반환한다.

3. 카운트 (COUNT)

  • count...By 를 이용한다.
  • long 타입을 반환한다.

4. 삭제

  • delete...By , remove...By 를 이용한다.
  • 삭제 된 개수를 반환한다.

5. 출력 값 제한 (LIMIT)

  • ...First<number>... , ...Top<number>... 를 이용한다.

6. 중복 제거 (DISTINCT)

  • ...Distinct... 를 이용한다.



📌 Query predicate keywords

특징

Table 9. Query predicate keywords 또한 굉장히 직관적으로 네이밍되어있음을 알 수 있다.

위의 subject keyword를 사용하면서 필요한 predicate keyword를 적절히 사용하면서 쿼리 메소드 네임을 지정하면 된다.




📌 예시

예시로, User 엔티티에서 결과 값을 가져오는 것으로 가정하고 메서드 이름을 작성해보자

  • 해당 이름과 이메일을 가진 행을 가져올 때 - findByNameAndEmail
  • 이름이 null이 아닌 행을 가져올 때 - findByNameIsNotNull
  • id로 내림차순 정렬 후, 이름으로 검색했을 때 가장 상위 행을 가져올 때 - findTop1ByNameOrderByIdDesc

이처럼, 네이밍이 굉장히 직관적이라 쉽게 작성할 수 있을 것이라고 생각한다.




🏴 Reference

Spring Data JPA - Reference Documentation

profile
지식의 깊이는 곧 이해의 넓이 📚

0개의 댓글