JPA가 지원하는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 쿼리 기술을 지원한다. JPQL은 가장 중요한 객체지향 쿼리 언어이다.
엔티티 객체를 조회하는 객체지향 쿼리이다. SQL을 추상화해서 특정 데이터베이스에 의존하지 않는다. 엔티티 직접 조회, 묵시적 조인, 다형성 지원으로 SQL보다 코드가 간결하다.
JPQL을 생성하는 빌더 클래스이다. 장점은 문자가 아닌 프로그래밍 코드로 JPQL을 작성할 수 있다. 문자 기반 쿼리와 다르게 컴파일 시점에 오류를 발견할 수 있다.
하지만, 매우 복잡하기 때문에 사용하기 불편하고 코드도 한눈에 들어오지 않는다.
JPQL을 생성하는 빌더 클래스이다. 코드 기반이면서 단순하고 사용하기 쉽다.
SQL을 직접 사용할 수 있는 기능이다. 특정 데이터베이스에 의존하는 기능을 사용해야할 때 이용한다. 데이터베이스를 변경하면 함께 수정해야한다는 단점이 있다.
SELECT, UPDATE, DELETE 문을 사용할 수 있고 em.persist() 메소드를 사용하면 되므로 INSERT 문은 없다.
SELECT 문
TypeQuery, Query
🔻 이름 기준 파라미터
🔻 위치 기준 파라미터
SELECT 절에 조회할 대상을 지정하는 것이다.
프로젝션 대상은 엔티티, 임베디드 타입, 스칼라 타입이 있다.
🔻 엔티티 프로젝션
원하는 객체를 바로 조회할 수 있다.
조회한 엔티티는 영속성 컨텍스트에서 관리된다.
🔻 임베디드 타입 프로젝션
임베디드 타입은 조회의 시작점이 될 수 없다.
임베디드 타입은 엔티티 타입이 아닌 값 타입이기 때문에 영속성 컨텍스트에서 관리되지 않는다.
🔻 스칼라 타입 프로젝션
숫자, 문자, 날짜와 같은 기본 데이터 타입들을 말한다.
중복 데이터를 제거하려면 DISTINCT를 사용한다.
JPA는 페이징을 다음 두 API로 추상화 했다.
🔻 집합 함수
➕ 집합 함수 사용 시 참고사항
🔻 GROUP BY
통계 데이터를 구할 때 특정 그룹끼리 묶어줌
🔻 HAVING
GROUP BY와 함께 사용
GROUP BY로 그룹화 한 통계 데이터를 기준으로 필터링
🔻정렬(ORDER BY)
결과 정렬시 사용
이런 유용한 정보를 나눠주셔서 감사합니다.