• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Slice 질문 있습니다.

21.01.26 14:52 작성 조회수 365

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

감사합니당.