엔터티 객체를 중심으로 개발할 수 있는 객체 지향 쿼리
JPQL은 find() 메소드를 통한 조회와 다르게 항상 데이터베이스에 SQL을 실행해서 결과를 조회
entityManager.createQuery() 메소드를 통해 쿼리 객체로 만든다. TypedQuery, Query 두 가지가 있다.getSingleResult() 또는 getResultList()를 호출해서 쿼리를 실행하고 데이터베이스를 조회한다.: 다음에 이름 기준 파라미터를 지정함? 다음에 위치값을 줌, 위치값은 1부터 시작(SELECT {프로젝션 대상} FROM)
임베디드 타입(embedded type, 복합 값 타입 또는 내장 타입)
: 새로운 값 타입을 직접 정의한 것으로 주로 기본 값 타입을 모아서 만든 하나의 타입을 말한다
엔티티의 필드 중 일부분을 하나의 임베디드 타입으로 정의하면 알아보기 쉬움
재사용성이 높게 디자인 할 수 있어 유지보수에 용이함
SELECT 결과를 여러 페이지로 나누어 특정 페이지의 데이터만 조회하는 기술
DBMS에 따라 각각 문법이 다른 문제점 -> API를 통해 추상화해서 간단하게 처리
public List<Menu> usingPagingAPI(int offset, int limit) {
String jpql = "SELECT m FROM Section04Menu m ORDER BY m.menuCode DESC";
List<Menu> pagingMenuList = manager.createQuery(jpql, Menu.class)
.setFirstResult(offset)
.setMaxResults(limit)
.getResultList();
return pagingMenuList;
}
JOIN FETCH 명령어를 사용한다.where, having 절에서만 사용가능 (select, from 절에서는 사용 불가)
동적쿼리 : EntityManager가 제공하는 메소드를 이용하여 JPQL을 문자열로 런타임 시점에 동적으로 쿼리를 만드는 방식을 말한다. 동적으로 만들어질 쿼리를 위한 조건식이나 반복문은 자바 코드를 이용할 수 있다.
정적쿼리 : 미리 쿼리를 정의하고 변경하지 않고 사용하는 쿼리를 말하며 미리 정의한 코드는 이름을 부여해서 사용하게 된다. 이를 NamedQuery라고 한다.