스프링/QueryDsl

[Querydsl] 다양한 Fetch 결과 받아보기

nomoreFt 2022. 3. 5. 19:19

기본 fetch

 //fetch
        List<Member> fetch = queryFactory
                .selectFrom(member)
                .fetch();

단건 조회 fetchOne

   //fetchOne
        queryFactory
                .selectFrom(member)
                .fetchOne();

다건이지만, 처음 것만 가져오기 fetchFirst

//fetchFirst
        queryFactory
                .selectFrom(member)
                .fetchFirst();

페이징,count 포함 fetchResults

   //fetchResult 페이징,count 포함
        QueryResults<Member> pagingResult = queryFactory
                .selectFrom(member).limit(5).offset(0)
                .fetchResults();

        pagingResult.getTotal();
        List<Member> data = pagingResult.getResults();
        long limit = pagingResult.getLimit();
        long offset = pagingResult.getOffset();

count만 가져오기 fetchCount

  //fetchCount count만 가져오기
        long couint = queryFactory
                .selectFrom(member)
                .fetchCount();

전체 쿼리 모습이다.


  @Test
    public void resultFetch() throws Exception {

        //fetch
        List<Member> fetch = queryFactory
                .selectFrom(member)
                .fetch();

        //fetchOne
        queryFactory
                .selectFrom(member)
                .fetchOne();

        //fetchFirst
        queryFactory
                .selectFrom(member)
                .fetchFirst();

        //fetchResult 페이징,count 포함
        QueryResults<Member> pagingResult = queryFactory
                .selectFrom(member).limit(5).offset(0)
                .fetchResults();

        pagingResult.getTotal();
        List<Member> data = pagingResult.getResults();
        long limit = pagingResult.getLimit();
        long offset = pagingResult.getOffset();

        for (Member m : data) {
            System.out.println("============Member : " + m);
        }
        //Paging처럼 count 쿼리까지 나간다.
        /* select count(member1)
        from Member member1 */
        /* select member1
        from Member member1 */


        //fetchCount count만 가져오기
        long couint = queryFactory
                .selectFrom(member)
                .fetchCount();
    }

🎇 fetchCount 유의 사항

쿼리가 복잡할 수록 Paging시에 가져오는 totalCount 쿼리도 복잡해지므로,
따로 Count를 분리할 때는 fetchCount 사용을 지양하자.