Spring Data JPA 가 제공하는 매직
Spring Data JPA는 메서드의 이름만으로 원하는 질의를 할 수 있는 방법을 제공하는데,이를 쿼리 메서드라고 한다.JPQL의 복잡성을 줄이고 ,간결하며, 사용성을 높이기 위해 도입되었다.
메소드 이름만으로 쿼리를 생성하는 기능이 있는데 인터페이스에 메소드만 선언하면 ,해당 메소드의 이름으로 적절한 JPQL쿼리를 생성해서 실행한다.다만 ,여기서 질의(query)는 select에만 해당된다.
쿼리 메서드 종류
관련 API
Spring Data JPA - Reference Documentation
기본 사용법
public interface MemberRepository extends Repository<Member,Long>{
List<Member> findByEmailAndName(String email,String name);
}
findByEmailAndName(..)메소드를 실행하면 스프링 데이터 JPA는 메소드 이름을 분석해서 JPQL을 생성하고 실행한다. 실제로 생성되는 쿼리를 보면 아래와 같다.
select m from Member m where m.email = ?1 and m.name=?2
엔티티의 필드명이 변경 되면 인터페이스에 정의한 메소드 이름도 꼭 함께 변경 해야 한다. 안그러면 오류가 발생한다.
만약 find..By로 쿼리 메소드를 만들면 find 뒤에 엔티티 타입을 지정한다.
public List<Member> findMemberByUserId(String userId);
Member이면 findMemberBy... 이런식으로 하면 된다.
만일 엔티티 타입을 지정하지 않으면 현재 실행 하는 Repository의 타입 정보를 기준으로 동작한다.
쿼리 메소드 리턴 타입은 Page<T>,Slice<T>,List<T>와 같은 Colloection<T> 형태가 될수 있다.
and 혹은 or 처리
2개 이상의 속성을 이용해서 엔티티들을 검색해야 할 경우를 위해 쿼리 메소드에는 'And'와 'Or'를 사용한다.
다만,속성이 두 개 이상일 때는 파라미터 역시 지정한 속성의 수만큼 맞춰줘야 한다.
부등호 처리
쿼리 메소드에서는 '<'와 '>' 같은 부등호는 'GreaterThan', 'LessThan'을 이용해서 처리할 수 있다.
title에 특정한 문자가 포함되어 있고 보드 넘버가 특정 숫자 이상인 데이터를 조회하고 싶을 때, 사용된다.