JPA는 엔티티 객체를 중심으로 개발하므로 SQL을 사용하지 않습니다. 하지만 검색쿼리를 사용할 때는 SQL을 사용해야 합니다.
SQL의 영향을 받아 SQL과 비슷하나, DB 테이블에 직접 접근하는 것이 아닌 JPA 엔티티에 동작합니다. 그래서 JPQL의 쿼리에는 테이블이 아닌 엔티티에서 사용되는 컬럼의 이름을 사용해야 합니다.
👉 SQL : 데이터베이스 테이블을 대상으로 쿼리
👉 JPQL : 엔티티 객체를 대상으로 쿼리
<if>
, <choose>
, <when>
등 같은 것을 써서 동적으로 쿼리를 생성할 수 있습니다. JPA에서 SQL을 왠만해선 직접 사용하지 않고, Query Method, @Query, Querydsl 등을 사용한다. 따라서 이 기능 안에서 효율적으로 검색 기능을 완성해야합니다.Querydsl => JPQL => SQL
from : 쿼리 소스를 추가합니다.
innerJoin, join, leftJoin, fullJoin, on : 조인 부분을 추가합니다. 조인 메서드에서 첫 번째 인자는 조인 소스이고, 두 번째 인자는 대상(별칭)입니다.
where : 쿼리 필터를 추가한다. 가변 인자나 AND/OR 메서드를 이용해 필터를 추가합니다.
groupBy : 가변인자 형식의 인자를 기준으로 그룹을 추가합니다.
having : Predicate 표현식을 이용해 "group by" 그룹핑의 필터를 추가합니다.
orderBy : 정렬 표현식을 이용해서 정렬 순서를 지정한다. 숫자나 문자열에 대해서는 asc()나 desc()를 사용하고, OrderSpecifier에 접근하기 위해 다른 비교 표현식을 사용합니다.
limit, offset, restrict : 결과의 페이징을 설정한다. limit은 최대 결과 개수, offset은 결과의 시작 행, restrict는 limit과 offset을 함께 정의합니다.