Query Methods
Spring Data JPA에서는 메서드 이름으로 SQL을 생성할 수 있는 Query Methods 기능을 제공함. JPARepository 인터페이스에서 해당 인터페이스와 매핑되어 있는 테이블에 요청하고자하는 SQL을 메서드 이름을 사용하여 선언함
public interface BlogRepository extends JpaRepository<Blog, Long> {
List<Blog> findAllByOrderByModifiedAtDesc();
}
JPARepository 인터페이스의 메서드 즉, query methods 들은 개발자가 정의되어 있는 규칙에 맞게 메서드를 선언하면, 해당 메서드 이름을 분석하여 SimpleJpaRepository에서 구현이 되어짐
Query Method Parsing
- query method은 subject와 predicate으로 파싱. 메서드 이름의 시작 부분인 find~By, exist~By 부분을 subject, 그 뒤는 predicate.
- predicate에 해당하는 property 표현은 기본적으로 entity가 직접 관리하는 속성이어야함
- depth를 더 들어가야 확인 가능한 필드 같은 경우 Camel Case를 통해 경로를 나타낼 수 있음 (예. findByAddressZipCode(ZipCode zipCode)
Query Method 문법
select
- findBy, getBy, readBy, queryBy, searchBy, streamBy, find (Entity명) By 모두 select의 일을 수행
- 리턴 타입은 List, Set, Object 등 여러 타입으로 할 수 있음 (데이터가 여러개인 경우 제외)
Member findUserByUsername(String username);
First, Top
- 데이터에서 출력할 데이터의 수를 정해서 리턴하게 하는 키워드
- 키워드뒤에 숫자를 붙이지 않으면 가장 상위 데이터 하나가 리턴
List<Member> findFirst1ByUserName(String username);
And, or
List<Member> findByUsernameAndEmail(String username, String email);
After, Before, GreaterThan, LessThan, Between
// id보다 더 큰 id를 가진 데이터 리턴
List<Member> findByIdAfter(Long id);
Sorting
조건에 따라 데이터의 정렬 수행
List<Member> findFirstByName(String name, Sort sort);
List<Member> findTop1ByNameOrderByDesc(String name);
그외의 메서드
https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html
참고
https://velog.io/@hyewon0218/%EC%BF%BC%EB%A6%AC%EB%A9%94%EC%86%8C%EB%93%9C%EB%9E%80#:~:text=Spring%20Data%20JPA%EC%97%90%EC%84%9C%EB%8A%94%20%EB%A9%94%EC%84%9C%EB%93%9C,%ED%95%98%EC%97%AC%20%EC%84%A0%EC%96%B8%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.