QueryDsl - 결과조회, sort, paging

청포도봉봉이·2023년 3월 20일
0

Spring

목록 보기
4/35
post-thumbnail

결과 조회 방법

    @Test
    public void resultFetch() {
        List<Member> result = queryFactory
                .selectFrom(member)
                .fetch();

        Member fetchOne = queryFactory
                .selectFrom(member)
                .fetchOne();

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

        QueryResults<Member> results = queryFactory
                .selectFrom(member)
                .fetchResults();

        results.getTotal();
        List<Member> content = results.getResults();

        Long count = queryFactory
                .selectFrom(member)
                .fetchCount();
    }
  • fetch()
    • 리스트 조회, 데이터 없으면 빈 리스트 반환
    • JPQL의 getResultList()와 유사하다
  • fetchOne()
    • 단 건 조회
    • 결과가 없으면 : null
    • 결과가 둘 이상이면 : com.querydsl.core.NonUniqueResultException
  • fetchFirst()
    • limit(1).fetchOne()
    • fetchFirst() 메소드는 fetchOne()과 유사하지만, 결과 집합이 비어 있으면 null 대신 NoSuchElementException 예외를 발생시킨다.
  • fetchResults()
    -fetchResults() 메소드는 QueryResults 객체를 반환한다. 이 객체는 결과 세트와 함께 페이징 및 정렬 정보도 포함한다. 이 메소드는 JPA getResultList() 대신 사용할 수 있다.
  • fetchCount()
    • count 쿼리로 변경해서 count 수 조회


정렬

    @Test
    public void sort() {
        em.persist(new Member(null, 100));
        em.persist(new Member("member5", 100));
        em.persist(new Member("member6", 100));


        List<Member> members = queryFactory
                .selectFrom(member)
                .where(member.age.eq(100))
                .orderBy(member.age.desc(), member.username.asc().nullsLast())
                .fetch();

        Member member5 = members.get(0);
        Member member6 = members.get(1);
        Member memberNull = members.get(2);

        assertThat(member5.getUsername()).isEqualTo("member5");
        assertThat(member6.getAge()).isEqualTo(member5.getAge());
        assertThat(memberNull.getUsername()).isNull();
    }
  • .orderBy()를 사용한다
  • ","를 통해 여러개 sort 가능
  • nullsLast() : null인 결과를 제일 마지막으로 보낸다.
  • nullsFirst() : null인 결과를 제일 첫번째로 보낸다.


페이징

    @Test
    public void paging() {
        List<Member> members = queryFactory
                .selectFrom(member)
                .orderBy(member.username.desc())
                .offset(1) //N번째 row 부터
                .limit(3) //N개를 가져온다.
                .fetch();

        assertThat(members.size()).isEqualTo(3);
    }

    @Test
    public void paging2() {
        QueryResults<Member> fetchResults = queryFactory
                .selectFrom(member)
                .orderBy(member.username.desc())
                .offset(1)
                .limit(3)
                .fetchResults();

        assertThat(fetchResults.getTotal()).isEqualTo(4);
        assertThat(fetchResults.getLimit()).isEqualTo(3);
        assertThat(fetchResults.getOffset()).isEqualTo(1);
        assertThat(fetchResults.getResults().size()).isEqualTo(3);
    }
  • offset : N번째부터
  • limit : N개를 가져온다.
profile
서버 백엔드 개발자

0개의 댓글