Spring Data JPA์์๋ Pageable ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํด ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ๊ฐํธํ๊ฒ ํ ์ ์์ต๋๋ค. ์ค๋์ Board ์ํฐํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก, ์ ๋ชฉ์ ํน์ ํค์๋๊ฐ ํฌํจ๋ ๊ฒ์๊ธ์ ํ์ด์งํ์ฌ ์กฐํํ๋ ํ
์คํธ ์ฝ๋๋ฅผ ์๊ฐํฉ๋๋ค.
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface BoardRepository extends JpaRepository<Board, Long> {
List<Board> findByTitleContaining(String searchKeyword, Pageable paging);
}
findByTitleContaining ๋ฉ์๋๋ ์ ๋ชฉ์ ํน์ ํค์๋๊ฐ ํฌํจ๋ Board ์ํฐํฐ๋ค์ Pageable ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฐ์ ธ์ต๋๋ค.
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import java.util.List;
public class BoardRepositoryTest {
@Autowired
private BoardRepository boardRepo;
@Test
public void testFindByTitleContaining() {
Pageable paging = PageRequest.of(0, 5); // ์ฒซ ํ์ด์ง, ํ์ด์ง๋น 5๊ฐ
List<Board> boardList = boardRepo.findByTitleContaining("์ ๋ชฉ", paging);
System.out.println("๊ฒ์ ๊ฒฐ๊ณผ:");
for (Board board : boardList) {
System.out.println(board.toString());
}
}
}
์ด ํ
์คํธ๋ H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์คํ ์ค์ผ ๋ ์ ์ ๋์ํฉ๋๋ค.
ํ
์คํธ๋ฅผ ์์ํ๊ธฐ ์ ์ H2 ์ฝ์ ๋๋ ๋ฉ๋ชจ๋ฆฌ DB๊ฐ ์ ๋๋ก ์ค์ ๋์ด ์๋์ง ํ์ธํด ์ฃผ์ธ์.
application.properties ์์:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
๊ฒ์ ๊ฒฐ๊ณผ:
Board(id=1, title=์ ๋ชฉ ํ
์คํธ1, ...)
Board(id=2, title=์ ๋ชฉ ํ
์คํธ2, ...)
...

Pageable์ ํ์ฉํ๋ฉด ๋ณต์กํ ํ์ด์ง ๋ก์ง ์์ด ๊ฐ๋จํ๊ฒ ์ํ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์์ต๋๋ค.PageRequest.of(0, 5)๋ 0๋ฒ์งธ ํ์ด์ง์์ 5๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋ค๋ ์๋ฏธ์
๋๋ค.Page<T> ํ์
์ผ๋ก ๋ฐํ๋ฐ์ ๋ ๋ง์ ํ์ด์ง ์ ๋ณด๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.