[ 김영한 Querydsl #4 ] 기본 문법 (2)

김수호·2024년 6월 8일
0
post-thumbnail

지난 포스팅에 이어 Querydsl 의 기본 문법에 대해서 알아보자.

👉 전체적인 내용은 다음과 같다.

1) 검색 조건 쿼리
2) 결과 조회
3) 정렬
4) 페이징
5) 집합
6) 상수, 문자 더하기
7) 조인 - 기본 조인
8) 조인 - on 절
9) 조인 - 페치 조언
10) 서브 쿼리
11) Case 문

이번 포스팅에서는 7) ~ 11) 에 대해서 학습한다.


7) 조인 - 기본 조인

  • 조인의 기본 문법은 첫 번째 파라미터에 조인 대상을 지정하고, 두 번째 파라미터에 별칭(alias)으로 사용할 Q타입을 지정 하면 된다.
    • join() , innerJoin() : 내부 조인(inner join)
    • leftJoin() : left 외부 조인(left outer join)
    • rightJoin() : rigth 외부 조인(rigth outer join)
  • 세타 조인 (연관관계가 없는 엔티티끼리 조회)
    • from 절에 여러 엔티티를 선택해서 세타 조인
    • 외부 조인(left, right) 불가능 ( 다음에 설명할 조인 - on절을 사용하면 외부 조인 가능 )

8) 조인 - on절

ON절을 활용한 조인은 다음과 같은 두 가지 경우에서 주로 사용한다.

  • 1) 연관관계가 있는 조인 대상을 필터링하는 경우
    • 참고) 외부조인이 아니라 내부조인(inner join)을 사용하는 경우는, 조인 대상 필터링을 할 때, on절을 활용하기 보다는 익숙한 where 절로 해결하는게 좋다. ( where 절에서 필터링 하는 것과 기능이 동일하다. ) 따라서, 외부조인을 하는 경우에만 조인 대상 필터링으로 on절을 활용하자.
  • 2) 연관관계가 없는 엔티티를 외부 조인하는 경우
    • 하이버네이트 5.1부터 on 을 사용해서 서로 관계가 없는 필드로 외부 조인하는 기능이 추가되었다. 물론 내부 조인도 가능하다.
    • 참고) leftJoin() 부분에 일반 조인과 다르게 엔티티 하나만 들어간다.
      • 일반조인: leftJoin(member.team, team)
      • on 조인: from(member).leftJoin(team).on(xxx)

9) 조인 - 페치 조인

  • 페치 조인은 SQL에서 제공하는 기능은 아니다. SQL조인을 활용해서 연관된 엔티티를 SQL 한번에 조회하는 기능이다. 주로 성능 최적화에 사용하는 방법이다.
    • Member 를 조회할 때, Member 안에 연관된 Team 엔티티도 같이 한 쿼리로 조회해서 넣어둠

10) 서브 쿼리

  • com.querydsl.jpa.JPAExpressions 사용
    • 서브쿼리 작성 시 from 절에 정의된 테이블과 동일한 테이블을 사용해야 하는 경우가 있다. 이때는 이를 구분하기 위해 Q클래스의 인스턴스를 생성해야 한다. (memberSub)
  • 참고) JPAExpressionsstatic import 해서 사용할 수 있다.
  • From 절의 서브쿼리 한계
    • JPA JPQL 서브쿼리의 한계점으로 from 절의 서브쿼리(인라인 뷰)는 지원하지 않는다. 따라서 당연히 Querydsl도 지원하지 않는다.
  • From 절의 서브쿼리 한계 해결방안
    • 1) 서브쿼리를 join으로 변경한다. (가능한 상황도 있고, 불가능한 상황도 있다.)
    • 2) 애플리케이션에서 쿼리를 2번 분리해서 실행한다.
    • 3) nativeSQL을 사용한다.

11) Case 문

select, 조건절(where), order by 에서 사용 가능.

  • 단순한 조건
  • 복잡한 조건 ( CaseBuilder 사용 )

강의를 듣고 정리한 글입니다. 코드와 그림 등의 출처는 김영한 강사님께 있습니다.

profile
현실에서 한 발자국

0개의 댓글