스프링데이터 JPA[쿼리 메서드] - 메서드 이름으로 쿼리 생성 규칙, 반환타입
쿼리 메서드의 메서드명으로 쿼리 생성시 명명 규칙에 대해 알아보자.
메서드 명명 규칙
- 조회: find…By ,read…By ,query…By get…By 예:) findHelloBy 처럼 ...에 식별하기 위한 내용(설명)이 들어가도 된다.
- COUNT: count…By 반환타입 long
- EXISTS: exists…By 반환타입 boolean
- 삭제: delete…By, remove…By 반환타입 long
- DISTINCT: findDistinct, findMemberDistinctBy
- LIMIT: findFirst3, findFirst, findTop, findTop3
자세한 규칙은 레퍼런스를 참고하자.
메서드 명명 규칙 스프링 공식 레퍼런스: docs.spring.io/spring-data/jpa/docs/2.4.3/reference/html/#jpa.query-methods.query-creation
Spring Data JPA - Reference Documentation
Example 109. Using @Transactional at query methods @Transactional(readOnly = true) public interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") v
docs.spring.io
- 간단한 조건 두 개정도면 위 메서드 명명 규칙을 사용해 직접 쿼리를 작성하지 않고 사용하는 것을 추천한다.
- 하지만 조건이 복잡해지고 많아질수록 메서드명이 엄청 길어지는 단점이 있기 때문에 조건이 3개 이상인 경우 @Query 어노테이션을 사용하여 직접 쿼리를 작성하는 것을 추천한다.
메서드 반환 타입
- 컬렉션, Optional, 엔티티 타입, 페이지 등 다양한 반환타입을 지원한다.
자세한 규칙은 레퍼런스를 참고하자
메서드 반환 타입 스프링 공식 레퍼런스: docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-return-types
Spring Data JPA - Reference Documentation
Example 109. Using @Transactional at query methods @Transactional(readOnly = true) public interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") v
docs.spring.io