흰 스타렉스에서 내가 내리지

[Querydsl] 결과 조회 본문

JPA

[Querydsl] 결과 조회

주씨. 2024. 4. 18. 01:46
728x90
  • fetch() : 리스트 조회, 데이터 없으면 빈 리스트 반환
  • fetchOne() : 단 건 조회
    • 결과가 없으면 : null
    • 결과가 둘 이상이면 com.querydsl.core.NonUniqueResultException 발생
  • fetchFirst() : limit(1).fetchOne()
  • fetchResults() : 페이징 정보 포함, total count 쿼리 추가 실행   DEPRECATED
  • fetchCount() : count 쿼리로 변경해서 count 수 조회                DEPRECATED
    @Test
    public void resultFetch(){
        List<Member> fetch = queryFactory
                .selectFrom(member)
                .fetch();

        Member member1 = queryFactory
                .selectFrom(member)
                .where(member.username.eq("member4"))
                .fetchOne();

        Member member2 = queryFactory
                .selectFrom(member)
                .fetchFirst();

        Long totalCount = queryFactory
               // .select(Wildcard.count)       // select count(*)
                .select(member.count())         // select count(member.id)
                .from(member)
                .fetchOne();
    }

 

 

  • Querydsl 의 fetchCount(), fetchResult() 는 개발자가 작성한 select 쿼리를 기반으로 count 용 쿼리를 내부에서 만들어서 실행한다.
  • 단순한 쿼리에서는 잘 동작하지만, 복잡한 쿼리에서는 제대로 동작하지 않는다. 
  • deprecated 됨
  • 따라서 count 쿼리가 필요하면 위 예시처럼 별도로 작성한다. 
    • count(*) 를 사용하고 싶으면 위 예시 주석처럼 Wildcard.count 를 사용한다
    • member.count() 를 사용하면 count(member.id) 로 처리된다.
    • 응답 결과는 숫자 하나이므로 fetchOne() 을 사용한다.

 

'JPA' 카테고리의 다른 글

[Querydsl] 집합 함수, GroupBy  (0) 2024.04.18
[Querydsl] 정렬과 페이징  (0) 2024.04.18
[Querydsl] 검색 조건 쿼리  (0) 2024.04.18
QueryDSL 세팅  (0) 2024.04.14
[JPQL] 조회해서 null 일 경우, 지정한 값을 반환하는 COALESCE  (0) 2024.04.14