점프 투 스프링부트를 참고하여 학습,작성하였습니다.
1.페이징 패키지
JPA 관련 라이브러리에 이미 페이징을 위한 패키지들이 들어 있다.
QuestionRepository에 Page<Question> 타입 객체를 리턴하는 findAll 메서드를 생성한다.
package com.example.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.model.Question;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
public interface QuestionRepository extends JpaRepository<Question, Integer> {
Question findBySubject(String subject);
Question findBySubjectAndContent(String subject, String content);
List<Question> findBySubjectLike(String subject);
Page<Question> findAll(Pageable pageable);
}
QuestionService에도 getList 메소드를 수정한다.
PageRequest.of(page, 10); 는 조회할 페이지의 번호에서 10개의 게시물을 보여준다.
//페이징
public Page<Question> getList(int page) {
Pageable pageable = PageRequest.of(page, 10);
return this.questionRepository.findAll(pageable);
}
서비스가 변경됨에 따라 컨트롤러도 수정해준다.
매개변수로 page매개변수가 추가되었다.
@GetMapping("/list")
public String list(Model model, @RequestParam(value="page", defaultValue="0") int page) {
Page<Question> paging = this.questionService.getList(page);
model.addAttribute("paging", paging);
return "question_list";
}
question_list.html에서 ${questionList}이였던 부분을 페이징으로 바꾼다.
<tr th:each="question ,loop: ${paging}">
그후 페이지 이동을 위한 링크를 추가한다.
<!-- 페이징처리 시작 -->
<div th:if="${!paging.isEmpty()}">
<ul class="pagination justify-content-center">
<li class="page-item" th:classappend="${!paging.hasPrevious} ? 'disabled'">
<a class="page-link"
th:href="@{|?page=${paging.number-1}|}">
<span>이전</span>
</a>
</li>
<li th:each="page: ${#numbers.sequence(0, paging.totalPages-1)}"
th:if="${page >= paging.number-5 and page <= paging.number+5}"
th:classappend="${page == paging.number} ? 'active'"
class="page-item">
<a th:text="${page}" class="page-link" th:href="@{|?page=${page}|}"></a>
</li>
<li class="page-item" th:classappend="${!paging.hasNext} ? 'disabled'">
<a class="page-link" th:href="@{|?page=${paging.number+1}|}">
<span>다음</span>
</a>
</li>
</ul>
</div>
<!-- 페이징처리 끝 -->
시간순으로 데이터 조회를 위해 getList를 다음처럼 수정한다.
//페이징
public Page<Question> getList(int page) {
List<Sort.Order> sorts = new ArrayList<>();
sorts.add(Sort.Order.desc("createDate"));
Pageable pageable = PageRequest.of(page, 10, Sort.by(sorts));
return this.questionRepository.findAll(pageable);
}
2.답변 개수추가
질문옆에 답변이 표시되게 만든다.
<td>
<a th:href="@{|/question/detail/${question.id}|}" th:text="${question.subject}"></a>
<span class="text-danger small ms-2"
th:if="${#lists.size(question.answerList) > 0}"
th:text="${#lists.size(question.answerList)}">
</span>
</td>
'BackEnd > SpringBoot' 카테고리의 다른 글
[Spring Boot] 스프링 시큐리티 (0) | 2024.07.04 |
---|---|
[Spring Boot] 부트스트랩, 대량 테스트 데이터, 꾸미기 (0) | 2024.07.04 |
[Spring Boot] Validation 라이브러리 폼 (0) | 2024.07.04 |