JPA Query Language의 줄임말
튜닝된 쿼리를 사용하고자 할 때 직접 SQL 작성
Query 1
@Query("SELECT p FROM AS Product AS p WHERE p.name = ?1")
List<Product> findByName(String name);
?1
는 파라미터를 전달받기 위한 인자로 ?1은 첫번째 인자를 말한다.
Query 2
@Query("SELECT p FROM AS Product AS p WHERE p.name = ?1")
List<Product> findByNameParam(@Param("name") String name);
Query 1의 방식은 파라미터 순서를 정해 넣어야하는 단점을 갖고 있기때문에 @Param
어노테이션을 이용하는 것이 좋다.
메서드의 이름을 기반으로 생성하는 JPQL의 한계는 @Query
로 해결 가능했지만 문자열을 입력하기 때문에 에러가 발생할 수 있다.
이를 해결하기 위해 사용한다.
정적 타입을 이용해 SQL과 같은 쿼리를 생성할 수 있도록 지원하는 프레임워크
엔티티 클래스와 Q도메인이라는 쿼리타입 클래스를 자체적을 생성해서 메타데이터로 사용