Purple Bobblehead Bunny

Backend/SPRINGBOOT

[SpringBoot] 게시판 만들기 9. 검색

준영어린이 2022. 11. 1. 18:30

 

 

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를 이용해 개인 프로젝트를 해보자! 화이팅!