Spring Data JPA์์๋ Pageable๊ณผ Page<T>๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด ํ์ด์ง ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํจ๊ณผ ๋์์, ์ ์ฒด ํ์ด์ง ์, ์ ์ฒด ๋ฐ์ดํฐ ๊ฐ์, ๋ค์ ํ์ด์ง ์ ๋ณด ๋ฑ ๋ค์ํ ์ ๋ณด๋ฅผ ํจ๊ป ๋ค๋ฃฐ ์ ์์ต๋๋ค.
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
public interface BoardRepository extends JpaRepository<Board, Long> {
Page<Board> findByTitleContaining(String searchKeyword, Pageable paging);
}
Page<T>๋ฅผ ๋ฐํํ๋ฉด ํ์ด์ง ์ฒ๋ฆฌ๋ ์ค์ ๋ฐ์ดํฐ๋ฟ ์๋๋ผ, ํ์ด์ง ๊ด๋ จ ๋ฉํ๋ฐ์ดํฐ๋ ํจ๊ป ๋ฐํ๋ฉ๋๋ค.
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import java.util.List;
public class BoardRepositoryTest {
@Autowired
private BoardRepository boardRepo;
@Test
public void testFindByTitleContaining() {
Pageable paging = PageRequest.of(0, 5, Sort.Direction.DESC, "seq");
Page<Board> pageInfo = boardRepo.findByTitleContaining("์ ๋ชฉ", paging);
// ํ์ด์ง ์ ๋ณด ์ถ๋ ฅ
System.out.println("PAGE SIZE : " + pageInfo.getSize());
System.out.println("TOTAL PAGES : " + pageInfo.getTotalPages());
System.out.println("TOTAL COUNT : " + pageInfo.getTotalElements());
System.out.println("NEXT : " + pageInfo.nextPageable());
// ์ค์ ์ฝํ
์ธ
List<Board> boardList = pageInfo.getContent();
System.out.println("๊ฒ์ ๊ฒฐ๊ณผ");
for (Board board : boardList) {
System.out.println(board.toString());
}
}
}
PAGE SIZE : 5
TOTAL PAGES : 60
TOTAL COUNT : 300
NEXT : Page request [number: 1, size 5, sort: seq: DESC]
๊ฒ์ ๊ฒฐ๊ณผ
Board [seq=300, title=ํ
์คํธ ์ ๋ชฉ200, writer=ํ
์คํฐ, content=ํ
์คํธ ๋ด์ฉ200, cnt=0]
Board [seq=299, title=ํ
์คํธ ์ ๋ชฉ199, writer=ํ
์คํฐ, content=ํ
์คํธ ๋ด์ฉ199, cnt=0]
Board [seq=298, title=ํ
์คํธ ์ ๋ชฉ198, writer=ํ
์คํฐ, content=ํ
์คํธ ๋ด์ฉ198, cnt=0]
Board [seq=297, title=ํ
์คํธ ์ ๋ชฉ197, writer=ํ
์คํฐ, content=ํ
์คํธ ๋ด์ฉ197, cnt=0]
Board [seq=296, title=ํ
์คํธ ์ ๋ชฉ196, writer=ํ
์คํฐ, content=ํ
์คํธ ๋ด์ฉ196, cnt=0]

Page<T>๋ ์ค์ ๋ฐ์ดํฐ ๋ชฉ๋ก๋ฟ ์๋๋ผ ๋ค์๊ณผ ๊ฐ์ ๋ฉํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค:
getSize() โ ํ์ฌ ํ์ด์ง๋น ๋ฐ์ดํฐ ์getTotalPages() โ ์ ์ฒด ํ์ด์ง ์getTotalElements() โ ์ ์ฒด ๋ฐ์ดํฐ ์nextPageable() โ ๋ค์ ํ์ด์ง ์ ๋ณด (Pageable ํ์
)์ ๋ ฌ ๊ธฐ์ค์ PageRequest.of(ํ์ด์ง ๋ฒํธ, ์ฌ์ด์ฆ, ์ ๋ ฌ ๋ฐฉํฅ, ์ ๋ ฌ ๊ธฐ์ค ํ๋๋ช
) ์ผ๋ก ์ค์ ํฉ๋๋ค.
ํด๋น ํด๋์ค๋ค(Page, Pageable, Sort, PageRequest)์ ๋ชจ๋ Spring Data JPA ๋๋ฉ์ธ ์ ํธ ํจํค์ง์ ํฌํจ๋์ด ์์ต๋๋ค:
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;