스프링/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 사용을 지양하자.