Spring/QueryDSL

결과 조회

느리지만 꾸준하게 2022. 4. 20. 01:02

결과 조회 리스트는 아래와 같다.

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

 

 

@Test
    public void resultFetch() {
        // member의 목록을 list로 조회
//        List<Member> fetch = queryFactory
//                .selectFrom(member)
//                .fetch();
//        Member fetchOne = queryFactory
//                .selectFrom(member)
//                .fetchOne();
//
//        Member fetchFirst = queryFactory
//                .selectFrom(member)
//                .fetchFirst();


        // query가 두 번 실행이 될 것이다 => total count를 가져와야 하니까
        QueryResults<Member> results = queryFactory
                .selectFrom(member)
                .fetchResults();


        // total이 있어야 밑에 어디까지 페이지가 1 2인지 나타나게 된다.
        results.getTotal();
        List<Member> content = results.getResults();
        // paging에 관한 사용하는 것들
        // 몇개까지 가지고온다.
        // results.getLimit()
        // 몇번째 부터 시작
        // results.getOffset()


    }

 

아래 처럼 실행결과에 쿼리가 생성이 된다.

// total counts를 가져오고

/* select
        count(member1) 
    from
    // count에서는 total 쿼리에 아래 count 부분만 달라진다.
        Member member1 */ select
            count(member0_.id) as col_0_0_ 
        from
            member member0_
            
            
// contents를 가져오게 된다. contents는 member를 다 가져오는데 
/* select
        member1 
    from
        Member member1 */ select
            member0_.id as id1_1_,
            member0_.age as age2_1_,
            member0_.team_id as team_id4_1_,
            member0_.username as username3_1_ 
        from
            member member0_

아래처럼 fetchResults()를 쓰게되면 deprecated라고 뜨긴하는데 여기서 해결중이다.

 

 

실전! Querydsl - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

 

 

 

 

 

 

 

 

fetchCount를 한 번 써보자.

// select을 count 쿼리로 바꾼다.
        // 마차가지로 deprecated가 뜬다.
        long total = queryFactory
                .selectFrom(member)
                .fetchCount();
// JPQL에서 member1엔티티를 직접 지정하여서 member의 id로 바뀌었다.

/* select
        count(member1) 
    from
        Member member1 */ select
            count(member0_.id) as col_0_0_ 
        from
            member member0_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<출처 김영한: 실전! Querydsl >

https://www.inflearn.com/course/Querydsl-%EC%8B%A4%EC%A0%84/dashboard

 

실전! Querydsl - 인프런 | 강의

Querydsl의 기초부터 실무 활용까지, 한번에 해결해보세요!, - 강의 소개 | 인프런...

www.inflearn.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

집합  (0) 2022.04.20
정렬 & 페이징  (0) 2022.04.20
검색 조건 쿼리  (0) 2022.04.19
기본 Q-Type 활용  (0) 2022.04.19
JPQL vs Querydsl  (0) 2022.04.19