Hansel

Querydsl 기초 문법 2 본문

Spring/Querydsl

Querydsl 기초 문법 2

핑슬 2022. 7. 25. 00:28
조인

SQL에서 가장 중요한 개념 중 하나이다.

select와 from을 명시하는 것은 동일하고 그 후에 join 메서드를 사용해 조인한다.

조인 대상이 되는 테이블의 연관 엔티티와 연관 엔티티를 파라미터로 보내면 된다.

On 절을 이용한 조인도 같은 방식으로 사용할 수 있다.

 

연관관계가 없는 조인

위에 연관관계가 있는 조인과의 차이점은 join 메서드 파라미터에 하나의 인자만 들어간다는 점이다.

 

join()파라미터 안에 두 엔티티가 들어가는 것은 pk, fk를 기준으로 조인하는 것이다.
하지만 연관관계가 없는 엔티티는 pk, fk 매핑이 안되어 있으니 하나의 엔티티만 들어간다.

 

페치조인

 

JPA의 꽃 페치조인이다.

조인 방법은 동일하며, 조인 메서드 이후에 .fetchJoin 메서드를 추가해 사용한다.

 

서브쿼리

서브쿼리는 select, from, where 절 등 다양한 곳에 사용된다.

하지만 JPA에서 from절 서브쿼리는 지원하지 않는다.

가장 나이가 많은 회원
평균 나이 이상의 회원

서브쿼리는 JPAExpressions을 사용해서 작성한다.

서브쿼리가 사용되는 곳에 적절한 집계함수를 선택해 파라미터로 JpaExpressions를 작성해주면 된다.

작성 방법은 SQL과 관련있어 따로 설명하지는 않겠다.

 

from 절의 서브쿼리 한계
JPA는 from 절의 서브쿼리는 지원하지 않는다. 따라서 Querydsl도 지원하지 않는다. 

하이버네이트 구현체를 사용하면 select 절의 서브쿼리는 지원한다. Querydsl도
하이버네이트 구현체를 사용하면 select 절의 서브쿼리를 지원한다.

from 절의 서브쿼리 해결방안
1. 서브쿼리를 join으로 변경한다.
2. 애플리케이션에서 쿼리를 2번 분리해서 실행한다.
3. nativeSQL을 사용한다.

 

Case 문

select, where, order by에서 사용 가능하다.

CaseBuilder를 사용해 작성한다.

저렇게 파라미터 안에서 작성해도 되고, 이미 작성된 것을 파라미터로 넘겨줄 수도 있다.

 

CaseBuilder는 NumberExpression 혹은 BooleanExpression을 반환한다.

이전에 확인했듯이 두 타입은 쿼리dsl의 조건절에 사용될 수 있다.

 

따라서 orderBy나 where절에 사용될 수 있다.

위 사진에서는 우선순위로 사용되었고,

아래 사진에서는 boolean타입으로 사용되었다.

이렇게 본인이 원하는 조건을 따로 생성하여 자유롭게 사용할 수 있다.

 

Concat

SQL에선 자주 사용되긴 했는데 실제 개발에서는 어떤 유형에 사용될지 제일 궁금하다.

반환값이 문자열이어야 해서 stringValue 메서드를 통해 문자열이 아닌 타입은 변환하는 작업이 필요하다.

 

'Spring > Querydsl' 카테고리의 다른 글

QueryDsl 활용 1  (0) 2022.07.27
Querydsl 기초 문법 1  (0) 2022.07.21
Querydsl / 적용  (0) 2022.07.21