결과 조회 방법
@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)
.limit(3)
.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개를 가져온다.