ํ๋ก์ ํธ ์งํ ์ค์ ์ ๋ ฌ์กฐ๊ฑด์ผ๋ก ํ๋์ด๋ฆ์ ์
๋ ฅ๋ฐ์ ์ฒ๋ฆฌํด์ผ ํ๋ ์๊ตฌ์ฌํญ์ด ์์๋ค.
ex) ๋ ์ง๋ณ, ์์๋ณ, ์ ์๋ณ ... ์ ๋ ฌ
@Slf4j
public class ReviewRequestDaoImpl extends QuerydslRepositorySupport implements ReviewRequestDao {
private final EntityManager em;
private final JPAQueryFactory query;
public ReviewRequestDaoImpl(JPAQueryFactory jpaQueryFactory, EntityManager entityManager) {
super(ReviewRequest.class);
this.em = entityManager;
this.query = jpaQueryFactory;
}
@Override
public Page<ReviewAnswerResponseDto> findMyAnswer(Long userId, Pageable pageable) {
JPAQuery<ReviewAnswerResponseDto> jpaQuery = query.select(
new QReviewAnswerResponseDto(
reviewRequest.reviewAnswer.id,
reviewRequest.id,
reviewRequest.reviewAnswer.title,
reviewRequest.reviewAnswer.code,
reviewRequest.reviewAnswer.comment,
reviewRequest.reviewAnswer.point,
reviewRequest.reviewAnswer.createdAt
)
).from(reviewRequest)
.join(reviewRequest.reviewAnswer, reviewAnswer)
.where(reviewRequest.reviewAnswer.answerUser.id.eq(userId));
List<ReviewAnswerResponseDto> result = getQuerydsl().applyPagination(pageable, jpaQuery).fetch();
return PageableExecutionUtils.getPage(result, pageable, jpaQuery::fetchCount);
}
}
QuerydslRepositorySupport
๋ฅผ ์์๋ฐ์ ์ฌ์ฉํ๋ค.
์ด ํด๋์ค๋ฅผ ์์๋ฐ์์ getQuerydsl()
, applyPagination
๋ฑ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
QuerydslRepositorySupport
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์๋ ์ง์ limit, offset, order ๋ฑ์ ์ค์ ํ๋ค. ์ง์ ์ค์ ํ๋ ๊ฒ๋ ํฌ๊ฒ ๋ฒ๊ฑฐ๋ก์ด ๊ฒ์ ์๋์ง๋ง Order์ ์ ์ฉ ํ๋๋ฅผ ๋์ ์ผ๋ก ์ ์ฉ์ํค๋ ๊ฒ์ด ์ข ๋ณต์กํ๋ค.
์ฝ๋๊ฐ ๊ต์ฅํ ๊น๋ํด์ ๊ธฐ์กด์ ์ฌ์ฉํ๋ ๋ฐฉ์๊ณผ ๋น๊ตํ์ ๋ ์ฑ๋ฅ์ ์ด์๊ฐ ์๋ค๋ฉด ์ด ๋ฐฉ์์ ์์ฃผ ์ฌ์ฉํ ๊ฒ ๊ฐ๋ค.