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