인프런 커뮤니티 질문&답변

relate16님의 프로필 이미지
relate16

작성한 질문수

실전! Querydsl

countQuery 질문(질문수정)

해결된 질문

작성

·

178

1

countQuery는 count할 때,  쿼리 최적화를 위해서 하는 걸로  알고 있는데 

 

public Page<MemberTeamDto> searchPageComplex(MemberSearchCondition condition, Pageable pageable) {

List<MemberTeamDto> content = queryFactory

.select(new QMemberTeamDto(member.id.as("memberId"), member.username.as("memberName"), member.age, team.id.as("teamId"), team.name.as("teamName"))) .from(member) .leftJoin(member.team, team)

.where(member.username.eq(condition.getUsername()), team.name.eq(condition.getTeamName()), member.age.goe(condition.getAgeGoe()), member.age.loe(condition.getAgeLoe()))

.offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch();

 

JPAQuery<Member> countQuery = queryFactory .selectFrom(member) .leftJoin(member.team, team) .where(member.username.eq(condition.getUsername()), team.name.eq(condition.getTeamName()), member.age.goe(condition.getAgeGoe()), member.age.loe(condition.getAgeLoe()));

return PageableExecutionUtils.getPage(content, pageable, () -> countQuery.fetchCount()); }

 

어차피 실행될 

List<MemberDto> content = queryFactory.select(..생략..

에다가

long count = content.size();  하면 

count가 나오지만

위처럼 굳이 countQuery를 짜서 쓰는 건

PageableExecutionUtils.getPage(content, pageable, () -> countQuery.fetchCount());

오직 이 기능 때문인가요 ?

답변 1

2

relate16님의 프로필 이미지
relate16
질문자

궁금증이 해결 됐습니다 . :]

long count = content.size();  하면 

해당 페이지의 count일 뿐 

총 몇 페이지까지 있는지 알기 위해서는 

totalCount가 필요하기 때문에 

countQuery가 있어야 되는 거였네요 :[

 

항상 감사합니다 :]

 

김영한님의 프로필 이미지
김영한
지식공유자

스스로 잘 해결하셨습니다^^

relate16님의 프로필 이미지
relate16

작성한 질문수

질문하기