이번장에서는 쿼리dsl을 사용하여 디비에서 데이터를 얻은 후 페이징처리를 위하여 Page 객체를 생성하는 방법에 대해 기록해두려고 한다.
나는 프로젝트를 진행하면서 공지사항 전체 조회 API를 구현하다가 쿼리dsl에서 얻은 데이터를 페이징 처리해야하는 경우가 있었다.
요구사항으로는
1) 고정핀으로 설정된 데이터는 최상단에 보여져야 한다.
2) 설정된 공지날짜를 기준으로 내림차순으로 보여져야한다 ( 최신 글이 맨 처음에 보여지도록 )
3) 설정된 공지날짜가 현재날짜를 벗어나면 안된다 ( 현재가 2020-12-12 이라면 2020-12-15일로 설정된 공지 데이터는 보여지면 안된다)
위 요구사항대로 쿼리를 구현하기 위해 나는 쿼리 dsl을 아래와 같이 작성하였다.
noticeList 타입이 List< Notice >인데 페이징 처리를 하기 위해 Page< Notice > 로 바꿔줘야 했다. 참고
변환 방법은 PageImpl<>클래스를 사용하면 되는데 올바른 크기로 페이지가 반환되지 않았다.
스택오버플로우를 참고하여 보니 이런 문제가 발생하는 경우가 많은 거 같았다.
참고
위와 같은 방법으로
페이징 처리를 하니 정상적으로 원하는 결과를 얻을 수 있었다.