[ 김영한 Querydsl #3 ] 기본 문법 (1)

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

Querydsl 의 기본 문법에 대해서 알아보자.

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

1) 검색 조건 쿼리
2) 결과 조회
3) 정렬
4) 페이징
5) 집합
6) 상수, 문자 더하기

7) 조인 - 기본 조인
8) 조인 - on 절
9) 조인 - 페치 조언
10) 서브 쿼리
11) Case 문

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


1) 검색 조건 쿼리

  • 참고) 검색 조건을 chain 형식으로 ( and / or 등) 적용할 수 있다.
    • select(member).from(member)selectFrom(member) 로 표현할 수 있다.
    • 2개 이상의 검색 조건이 and 인 경우는 쉼표로 작성할 수 있다.
      • where ( member.username.eq("member1"), member.age.between(10, 30) )
    • null 값은 무시된다.

2) 결과 조회

  • fetch() : 리스트 조회, 데이터 없으면 빈 리스트 반환
  • fetchOne() : 단 건 조회
    • 결과가 없으면 : null
    • 결과가 둘 이상이면 : com.querydsl.core.NonUniqueResultException
  • fetchFirst() : 단 건이든 아니든 1개만 조회 (=limit(1).fetchOne())
  • fetchResults() : 페이징 정보 포함 ( total count 쿼리 추가 실행 )
  • fetchCount() : count 쿼리로 변경해서 count 수 조회

3) 정렬

  • 참고) 내림차순: desc() , 오름차순: asc()
    • nullsLast() , nullsFirst() : null 데이터 순서 부여

4) 페이징

  • 조회 건수 제한
  • fetchResult() 사용
    • 참고) 카운트(count)도 같이 포함해서 조회하는 경우 fetchResults() 를 사용하면 된다. ( 단, 성능상 카운트 쿼리와 조회 쿼리가 완전히 다르게 적용되어야 하는 경우는, 사용하지 말자. )

5) 집합

  • 참고) 합계(SUM), 평균(AVG), 최대(MAX), 최소(MIN), 갯수(COUNT), ...
    • JPQL이 제공하는 모든 집합 함수를 제공한다.
    • 참고) select 절에 원하는 걸 직접 명시하는 경우는, 조회시 Tuple 이라는 것으로 조회하게 된다. ( 조회 대상이 2개 이상이면 Tuple 로 조회 )
      • Tuple : 여러개 타입이 있을 때, 꺼내올 수 있는 것으로 이해하자. 참고로 실무에서는 Tuple 을 많이 쓰지는 않고, 이후에 학습할 DTO로 직접 조회하는 방법이 있는데, 그 방법을 많이 사용한다. )
  • 참고) groupBy , 그룹화된 결과를 제한하려면 having

6) 상수, 문자 더하기

  • 상수
    • 상수가 필요하면 Expressions.constant(xxx) 사용 ( com.querydsl.core.types.dsl.Expressions )
    • 참고) 쿼리에는 상수가 나가지 않는다. 결과에서만 상수를 받게된다.
  • 문자 더하기 concat
    • {username}_{age} 의 형식으로 조회했다.
    • 나이는 타입이 문자가 아니다. 따라서 stringValue() 를 통해 문자로 변환해야 한다.
    • 참고) 문자가 아닌 다른 타입들은 stringValue() 로 문자로 변환할 수 있다. 이 방법은 ENUM 을 처리할 때도 자주 사용한다.

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

profile
현실에서 한 발자국

0개의 댓글