객체지향 쿼리 언어3 - 프로젝션
- 소개
- 기본 문법과 쿼리API
- 프로젝션(SELECT)
- 페이징
- 조인
- 서브 쿼리
- JPQL 타입 표현과 기타식
- 조건식 (CASE 등등)
- JPQL 함수
01. 프로젝션
- SELECT 절에 조회할 대상을 지정하는 것
- 프로젝션 대상: Entity, Embedded, Scalar 타입 (숫자, 문자 등 기본 데이터 타입)
- 엔티티 프로젝션
SELECT m FROM Member m
- 엔티티 프로젝션
SELECT m.team FROM Member m
- 임베디드 타입 프로젝션
SELECT m.address FROM Member m
- 스칼라 타입 프로젝션
SELECT m.username, m.age FROM Member m
-
DISTINCT로 중복 제거
- 조인을 명시적으로 표현해주는게 좋다.
- 명시적 조인
- 묵시적 조인
List<Member> result = em.createQuery("SELECT m FROM Member m", Member.class); // 리스트에 담겨있는 Member들 모두 영속성 컨텍스트로 관리된다!
// 1번 방법 (Bad)
List<Team> result = em.createQuery("SELECT m.team FROM Member m", Team.class);
// 2번 방법 (Good) - 명시적으로 조인문으로 한눈에 확인하는게 좋다. (튜닝요소가 많음)
List<Team> result = em.createQuery("SELECT t FROM Member m JOIN m.team t", Team.class);
02. 프로젝션 - 여러 값 조회
-
SELECT m.username, m.age FROM Member m
-
Query 타입으로 조회
-
Object[] 타입으로 조회
-
new 명령어로 조회
-
단순 값을 DTO로 바로 조회
-
SELECT new jpabook.jpql.UserDTO(m.username, m.age) FROM Member m
-
패키지 명을 포함한 전체 클래스 명 입력
- 순서와 타입이 일치하는 생성자 필요
-
댓글남기기