3์ฐจ ํ๋ก์ ํธ 1์ผ์ฐจ
ํ๋ก์ ํธ ์๊ตฌ์ฌํญ๊ณผ ๋๋ฉ์ธ ์ค๊ณ๋ฅผ ๋ง์น๊ณ ์ค๋๋ถํฐ API ๊ตฌํ์ ์์ํ๋ค.
์ค๋ ๋ด๊ฐ ๊ตฌํํ๊ณ ์ ํ ๊ธฐ๋ฅ์ ์ฝ๋๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ๋ถ๋ถ์ด๋ค.
์ด๋ฒ์ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉด์ ๋์ ์ฟผ๋ฆฌ๋ Querydsl์ ์ฌ์ฉํ๊ณ ์ ํ๊ธฐ ๋๋ฌธ์ ํ์ด์ง, ๊ฒ์ ๋ฑ์ด ํ์ํ ๋ชฉ๋ก์กฐํ API๋ Querydsl Jpa๋ก ๊ตฌํํ๋ค.
@Slf4j
@RequiredArgsConstructor
public class ReviewRequestDaoImpl implements ReviewRequestDao {
private final JPAQueryFactory query;
@Override
public Page<ReviewRequestResponseDto> findSearchByTitleOrCommentAdvanced(String keyword, Pageable pageable, boolean isAsc) {
List<ReviewRequestResponseDto> results = query
.select(new QReviewRequestResponseDto(
user.username,
reviewRequest.title,
reviewRequest.comment,
reviewRequest.status.stringValue(),
reviewRequest.createdAt)
)
.from(reviewRequest)
.join(reviewRequest.requestUser, user).fetchJoin()
.where(containingTitleOrComment(keyword))
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.orderBy(isAsc ? reviewRequest.createdAt.desc() : reviewRequest.createdAt.asc())
.fetch();
JPAQuery<ReviewRequestResponseDto> jpaQuery = query
.select(new QReviewRequestResponseDto(
user.username,
reviewRequest.title,
reviewRequest.comment,
reviewRequest.status.stringValue(),
reviewRequest.createdAt)
)
.from(reviewRequest)
.join(reviewRequest.requestUser, user)
.where(containingTitleOrComment(keyword));
return PageableExecutionUtils.getPage(results, pageable, jpaQuery::fetchCount);
}
}
โ
PageableExecutionUtils
Querydsl๋ฅผ ์ด์ฉํด์ ํ์ด์ง์ ๊ตฌํํ ๋ ๋ง์ ์๋ฃ์์ PageableExecutionUtils
๋ฅผ ํตํ ์ฑ๋ฅ๊ฐ์ ์ ๊ถ์ฅํ๊ณ ์๋ค. ํ์ด์ง ์ ์ ์ฒด ์์์๋ฅผ ์๊ธฐ ์ํด ๋งค ์์ฒญํ๋ค count
์์ฒญ์ ๋ ๋ฆฌ๋๋ฐ ์ด ๋ถ๋ถ์ PageableExecutionUtils
๋ฅผ ์ด์ฉํ๋ฉด ์กฐ๊ธ ๊ฐ์ ์ํฌ ์ ์๋ค.
์์ ๊ฐ์ด ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ถ๋ถ๊ณผ ์นด์ดํ ์ ์ํ ๋ถ๋ถ์ ๋ถ๋ฆฌํ๋ฉด ์ฒซ ํ์ด์ง์ ๋ ํ์ด์ง์ ๋ํด ์นด์ดํธ ์ฟผ๋ฆฌ๋ฅผ ์๋ตํ ์ ์๋ค.
โ
๋์ ์ ๋ ฌ์กฐ๊ฑด? dynamic sort?
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ์ ๋ ฌ์กฐ๊ฑด์ ๋์ ์ผ๋ก ์ ์ฉ์ํค๊ณ ์ถ์๋ค.
( ๋ ์ง๊ธฐ์ค ๋ด๋ฆผ์ฐจ์ -> ์ค๋ฅธ์ฐจ์ -> ๋ด๋ฆผ์ฐจ์ ... ์ด๋ฐ์์ผ๋ก )
Service
๊ณ์ธต์์ Pageable
์ ์ ๋ ฌ์กฐ๊ฑด์ ํฌํจํด์ ๋๊ฒจ์ฃผ๊ณ Querydsl
์์ ํด๋น Pageable
์ ๋ฃ์ด์ฃผ๋ฉด ์์์ ๋ ์ค ์์๋๋ฐ ์ ๋๋ค. ใ
ใ
๊ฒ์์ ํด๋ณด๋ ์กฐ๊ธ ๋ ๋ณต์กํ ๊ฒฝ์ฐ OrderSpecifier
๋ฅผ ์ง์ ์ปค์คํ
ํ๋ ๋ฐฉ๋ฒ๋ ์๋ ๊ฒ ๊ฐ์๋ฐ ๋๋ ์กฐ๊ธ ๋ ์ฌํํ๊ฒ ํด๋ดค๋ค.
.orderBy(isAsc ? reviewRequest.createdAt.desc() : reviewRequest.createdAt.asc())
์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ๋ค.
ํ์ฅ์ด ๋งค์ฐ ๋จ์ด์ง์ง๋ง.. ใ
์ด์จ๋ ๋์์ ํ๋ค. ์ด๋ ๊ฒ Java์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ ๋ค์ํ ์๋ฃจ์
์ ์ ์ฉํ ์ ์๋ค๋ ๊ฒ์ด Querydsl์ ๋๋ค๋ฅธ ์ฅ์ ์ด๋ผ ์๊ฐ๋๋ค.