SpringDataJPA
@Query 와 파라미터 바인딩
쿠카이든
2022. 6. 21. 09:56
728x90
- 리포지토리 메소드에 직접 쿼리를 정의하려면 @org.springframework.data.jpa.repository.Query 어노테이션을 사용한다.
- 이 방법은 실행할 메소드에 정적 쿼리를 직접 작성하므로 이름 없는 Named 쿼리라 할 수 있다.
- 또한 JPA Named 쿼리처럼 애플리케이션 실행 시점에 문법 오류를 발견할 수 있는 장점이 있다.
public interface MemberRepository extends JpaRepository<Member, Long> {
@Query("select m from Member m where m.username = ?1")
Member findByUsername(String username);
}
파라미터 바인딩
- 스프링 데이터 JPA는 위치 기반 파라미터 바인딩과 이름 기반 파라미터 바인딩을 모두 지원한다.
select m from Member m where m.username = ?1 //위치 기반
select m from Member m where m.username = :name //이름 기반
- 이름 기반 파라미터 바인딩을 사용하려면 아래 예제와 같이 org.springframework.data.repository.query.Param(파라미터 이름) 어노테이션을 사용하면 된다.
- 코드 가독성과 유지보수를 위해 이름 기반 파라미터 바인딩을 사용하자.
import org.springframework.data.repository.query.Param
public interface MemberRepository extends JpaRepository<Member, Long> {
@Query("select m from Member m where m.username = :name")
Member findByUsername(@Param("name") String username);
}
출처 : JAVA 표준 ORM JPA 프로그래밍 (저자 : 김영한)
728x90