JPA Repository에서는 다음과 같은 키워드로 검색 하는 기능을 제공 하고 있다.
findBy(컬럼 이름) -> 컬럼에서 키워드를 넣어서 찾는다(정확한 키워드명을 검색)
findBy(컬럼 이름)Containing -> 컬럼에서 키워드가 포함된 것을 찾는다(키워드 중 일부분만 검색해도 가능)
우선 Repository로 가자
return type을 Page로, 제네릭을 써서 보드 객체를 담고, 매개변수로 keyword, pageable을 담는다.
pageable을 쓰는 이유는, 검색을 해도 그 검색 된 키워드 목록을 페이지로 보여주기 위해서다.
Service로 가서, 추가를 해 준다. 위 설명처럼 JPA Repository에서는 findByContaining 기능이 있다.
검색 단어를 위한 searchKeyword와, 페이징을 위한 pageable을 매개변수로 담는다.
Controller로 가자
boardList로 가서 매개변수 searchKeyword를 추가 해 주고, 검색 했을 때와, 하지 않았을 때를 구분 지어 줘야 한다.
if문을 돌려서 검색한 단어가 없을 때, 기존의 게시물을 보여주고
검색하는 단어가 있을 때, 검색 된 게시물 리스트를 보여준다.
서버를 재 실행 해서 확인 해 보면
쿼리스트링을 이용해서 파라미터를 넘겨본다. 5와 관련된 게시물 목록이 뜨는데 여기서 문제가 2번 째 페이지를 클릭하면
넘긴 파라미터 값이 없어져버림.
board.html
가서 타임리프 링크를 수정을 해 줘야 한다. 그리고 검색 버튼도 만들어보자
기존의 th:block 태그 내부 내용을 수정 해 줘야 한다.
<th:block th:each="page : ${#numbers.sequence(startPage, endPage)}">
<a th:if="${page != nowPage}" th:href="@{/board/list(page= ${page-1}, searchKeyword = ${param.searchKeyword})}" th:text="${page}"></a>
<strong th:if="${page == nowPage}" th:text="${page}"></strong>
</th:block>
searchKeyword라는 파라미터를 가져왔다.
param을 통해 특정 키워드를 가져와 넘겨준다.
검색창
<form th:action="@{/board/list}" method="get">
<input type="text" name="searchKeyword">
<button type="submit">검색</button>
</form>
주소창의 파라미터 값을 보면 알겠지만, 검색 창에 6을 검색을 했다.
2 페이지를 눌렀더니, 파라미터 값이 같이 넘어가게 되고, 페이지도 수월하게 넘어 가는 것을 확인했다.
JPA를 처음 공부 했는데, 기존 스프링 프레임워크보다 너무 편하다는 느낌이 들었다.
JPA를 이용해 개인 프로젝트를 해보자! 화이팅!
'Backend > SPRINGBOOT' 카테고리의 다른 글
[SpringBoot] 에러 페이지 설정 (0) | 2023.01.09 |
---|---|
[SpringBoot] SpringBoot, JWT 오류 The signing key's size is 240 bits which is not secure enough for the HS256 algorithm (0) | 2022.11.14 |
[SpringBoot] 게시판 만들기 9. 페이징 처리 (0) | 2022.11.01 |
[SpringBoot] 게시판 만들기 8. 파일 업로드 (0) | 2022.11.01 |
[SpringBoot] 게시판 만들기 7. 처리 메시지 (0) | 2022.10.31 |