Pageable pageable = new PageRequests(page, size);
Query query = new Query().with(pageable);
List<XXX> list = mongoTemplate.find(query, XXX.class);
return PageableExecutionUtils.getPage(
list,
pageable,
() -> mongoTemplate.count(Query.of(query).limit(-1).skip(-1), XXX.class));
이렇게 하면 mongoTemplate이 Page를 지원하지 않는다고 해도 PageableExecutionUtils을 이용해서 Page에 담을 수 있다
List<Chat>으로 돌려보내는 방법
package kpring.chat.chat.repository
import kpring.chat.chat.model.Chat
import org.springframework.data.domain.PageRequest
import org.springframework.data.domain.Pageable
import org.springframework.data.domain.Sort
import org.springframework.data.mongodb.core.MongoTemplate
import org.springframework.data.mongodb.core.query.Query
import org.springframework.stereotype.Repository
@Repository
class RoomChatCustomRepository(
private val mongoTemplate: MongoTemplate,
) {
fun findListByContextIdWithPaging(
contextId: String,
page: Int,
size: Int,
): List<Chat> {
val sort: Sort = Sort.by(Sort.Order.desc("createdAt"))
val pageable: Pageable = PageRequest.of(page, size, sort)
var query: Query = Query().with(pageable)
return mongoTemplate.find(query, Chat::class.java)
}
}
여기에다가 이 부분을 더하면 Page로 감싸서 돌려보낼 수 있다
return PageableExecutionUtils.getPage(
list,
pageable,
() -> mongoTemplate.count(Query.of(query).limit(-1).skip(-1), XXX.class));
나는 코틀린이라 이렇게 해 주었다
Page<Chat>으로 돌려보내는 방법
fun findPageByContextIdWithPaging(
contextId: String,
page: Int,
size: Int,
): Page<Chat> {
val sort: Sort = Sort.by(Sort.Order.desc("createdAt"))
val pageable: Pageable = PageRequest.of(page, size, sort)
val query: Query = Query().with(pageable)
val list: List<Chat> = mongoTemplate.find(query, Chat::class.java)
return PageableExecutionUtils.getPage(
list,
pageable,
{
mongoTemplate.count(Query.of(query).limit(-1).skip(-1), Chat::class.java)
},
)
}
참고 자료 :
'Developing > TIL(Develop)' 카테고리의 다른 글
[React] React Hook 리액트 훅 (1) | 2024.09.26 |
---|---|
Spring과 STOMP를 이용해서 웹소켓 연결하기 (0) | 2024.09.26 |
QueryDSL로 검색 기능 구현 + 쿼리 빌드 단계적으로 하기 + LocalDateTime을 Controller의 Parameter로 받을 때 주의할 점 (0) | 2024.09.05 |
QueryDSL 설정 (0) | 2024.09.05 |
SQL이란 무엇인가 (0) | 2024.08.01 |