웹공부/SPRING
페이지네이션
Rabet
2024. 12. 17. 10:48
- 참조 링크
https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html
JPA Query Methods :: Spring Data JPA
By default, Spring Data JPA uses position-based parameter binding, as described in all the preceding examples. This makes query methods a little error-prone when refactoring regarding the parameter position. To solve this issue, you can use @Param annotati
docs.spring.io
- repository/NewsRepository.java
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@Repository
public interface NewsRepository extends JpaRepository<News, Long>{
Page<News> findAll(Pageable pageable);
}
- controller/NewsController.java
- @RequestParam(0부터)로 page를 int page에 넣겠다.
- Pageable pageable = PageRequest.of(page:현재페이지, 몇개 페이지)
- 리스폰스로 pageable찾기
- hasNext, hasPrev는 이전과 다음의 존재여부
// 페이지네이션
@GetMapping("/list")
public String getNewsList(Model model,
@RequestParam(name = "page", defaultValue = "0") int page) {
Pageable pageable = PageRequest.of(page, 5);
Page<News> newsPage = newsRepository.findAll(pageable);
model.addAttribute("newsPage", newsPage);
model.addAttribute("prev", pageable.previousOrFirst().getPageNumber());
model.addAttribute("next", pageable.next().getPageNumber());
model.addAttribute("hasNext", newsPage.hasNext());
model.addAttribute("hasPrev", newsPage.hasPrevious());
return "news/list";
}
- resources/templates/news/list.mustache
{{>layouts/header}}
<div class="container mt-4">
<ul class="list-group">
{{#newsPage.content}}
<li class="list-group-item">
<h4 class="mb-2"><a href="/news/{{newsId}}">제목 : {{title}}</a></h4>
<small class="text-muted">News ID: {{newsId}}</small>
</li>
{{/newsPage.content}}
<br>
<a href="/news/new">Create News</a>
<ul class="pagination justify-content-center">
{{#hasPrev}}
<a class="page-link" href="?page={{prev}}">Previous</a>
{{/hasPrev}}
{{#hasNext}}
<a class="page-link" href="?page={{next}}">Next</a>
{{/hasNext}}
</ul>
</ul>
</div>
{{>layouts/footer}}