객체지향 쿼리 언어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
      
    • 패키지 명을 포함한 전체 클래스 명 입력

    • 순서와 타입이 일치하는 생성자 필요

댓글남기기