[QueryDSL] Fetch

KMS·2022년 5월 2일
0

QueryDSL

목록 보기
2/8

QueryDSL에서 쿼리문을 처리한 후 반환되는 데이터를 조회하는 방법들을 보겠습니다.

// Member 테이블에는 총 4개의 튜플, Team 테이블에는 총 1개의 튜플이 저장되어 있습니다
	@Test
    void queryDslProjectionBasic() {
        factory = new JPAQueryFactory(em);
        QMember member = QMember.member;
        QTeam team = QTeam.team;

        List<Member> membersFetch = factory
                .selectFrom(member)
                .fetch();

        Team teamFetchOne = factory
                .selectFrom(team)
                .fetchOne();

        Member membersFetchFirst = factory
                .selectFrom(member)
                .fetchFirst();

        Long memberCount = factory
                .select(member.count())
                .from(member)
                .fetchOne();

        Assertions.assertThat(membersFetch.size()).isEqualTo(4);
        Assertions.assertThat(teamFetchOne.getName()).isEqualTo("TeamA");
        Assertions.assertThat(membersFetchFirst).isInstanceOf(Member.class);
        Assertions.assertThat(memberCount).isEqualTo(4);
    }

1. fetch(): 쿼리문을 처리 한 후, 반환되는 값들을 그대로 리스트로 가져옵니다. 이떄, 반환되는 데이터가 없으면 빈 리스트(Empty List)가 반환됩니다.
2. fetchOne(): 단 하나의 데이터를 조회합니다. 쿼리문에 의해 반환되는 데이터가 0개 이면 NULL 반환, 1개이면 정상, 그리고 2개 이상일 경우에는 NonUniqueResultException가 발생합니다.
3. fetchFirst(): limit(1).fetchOne()과 동일하며, 항상 한개의 데이터만 조회됩니다.
4-1. fetchResult(): 페이징 정보 포함 & count 쿼리도 같이 실행됩니다. But, deprecated.
4-2. fetchCount(): 쿼리를 count 쿼리로 변경해서, count 값일 반환합니다. But, deprecated.
4-3. fetch + count:

		Long memberCount = factory
                .select(member.count())
                .from(member)
                .fetchOne();
profile
Student at Sejong University Department of Software

0개의 댓글