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

우럭아왜우럭님의 프로필 이미지
우럭아왜우럭

작성한 질문수

실전! Querydsl

스프링 데이터 페이징 활용1 - Querydsl 페이징 연동

Slice 질문 있습니다.

작성

·

442

1

안녕하세요, 만약 Page대신 Slice를 사용하려고 하면

리미트에 +1 만큼하고 쿼리를 날리고, 다음페이지가 있는지 확인해야하는데, 이 부분은 아래 코드처럼 개발하는 사람이 직접 처리해주어야 하는건가요?

List<MemberTeamDto> content = queryFactory
.select(new QMemberTeamDto(
member.id.as("memberId"),
member.username,
member.age,
team.id.as("teamId"),
team.name.as("teamName")))
.from(member)
.leftJoin(member.team, team)
.where(
usernameEq(condition.getUsername()),
teamNameEq(condition.getTeamName()),
ageBetween(condition.getAgeLoe(), condition.getAgeGoe()))
.offset(pageable.getOffset())
.limit(pageable.getPageSize() + 1)
.fetch();

if (content.size() == pageable.getPageSize() + 1) {
SliceImpl slice = new SliceImpl<>(content.subList(0, pageable.getPageSize()), pageable, true);
} else {
SliceImpl slice = new SliceImpl<>(content, pageable, false);
}

그리고, 카운트 쿼리를 따로 날리는 Complex인 경우
현재 Member와 Team이 다대일 이니깐 아래처럼leftJoin(member.team, team) 이부분 지워도 count는 똑같이 나오는게 맞죠??

queryFactory
    .selectFrom(member)
    .where(
        username(condition.getUsername()),
        teamName(condition.getTeamName()),
        ageBetween(condition.getAgeLoe(), condition.getAgeGoe()));

답변 2

2

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

안녕하세요. seungbin님^^

Querydsl은 slice를 직접 해주어야 합니다.

그리고 두번째 질문은 제가 답을 드리는 것도 좋지만, 직접 문제가 될 것 같은 케이스 들을 만들어서 테스트 해보시길 추천드립니다. 그래야 완전히 본인 것이 되니까요^^

감사합니다.

1

감사합니당.

우럭아왜우럭님의 프로필 이미지
우럭아왜우럭

작성한 질문수

질문하기