반응형
스프링 레거시 프로젝트로 검색 기능을 구현할 때에는 hidden 태그로 검색어를 감싸고... 쿼리문에 조건문도 넣고 다소 복잡하게 만들었었는데 스프링부트에서는 검색 기능 역시 JPA 기능을 통해 간단하게 구현할 수 있다.
💡JPA Repository
- findBy(컬럼 이름) : 컬럼에서 키워드를 넣어서 찾겠다.
- findBy(컬럼 이름)Containing : 컬럼에서 키워드가 포함된 것을 찾겠다.
🤍검색 기능 구현하기
BoardRepository 수정
- findByTitleContaining : title 컬럼을 기준으로 해당 키워드가 포함된 것을 찾겠다. findBy 사용 시에는 완전한 제목을 입력해야 하지만 findBy컬럼Containing 을 사용함으로써 해당 키워드가 포함된 글을 검색할 수 있다.
@Repository //엔티티, PK로 지정한 컬럼의 데이터 타입
public interface BoardRepository extends JpaRepository<Bootboard, Integer> {
Page<Bootboard> findByTitleContaining(String searchKeyword, Pageable pageable);
}
BoardController 수정
- 기존에는 모든 목록을 출력했지만 이제 조건문을 추가하여 검색했을 때, 검색하지 않았을 때를 구분해야함.
boardList.html 수정
- 검색어에 맞게 페이징 처리 되도록 searchKeyword=${param.searchKeyword} 추가
- 검색어 입력할 <input> 태그, 검색 <button> 추가
<!--굳이 태그로 감쌀 필요 없는 부분을 타임리프 문법으로 사용할 때 사용-->
<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}" style="color:red"></strong>
</th:block>
<form th:action="@{/board/list}" method="get">
<input type="text" name="searchKeyword">
<button type="submit">검색</button>
</form>
검색 실행
- 11을 쳤을 때 11이 글 제목인 글이 아니라 11이 포함된 (findBy_Containing) 글 목록이 출력됨.
- 페이징도 잘 됨.
이미지가 아닌 '이미'만 쳤을 때도 잘 나오는 것을 확인할 수 있다.
반응형
'💻 my code archive > 🎨게시판 만들기' 카테고리의 다른 글
[스프링부트 게시판 만들기] pageable 사용하여 간단한 페이징 처리 구현하기 (0) | 2022.03.13 |
---|---|
[스프링부트 게시판 만들기] 파일 업로드 구현하기 (0) | 2022.03.13 |
[스프링부트 게시판 만들기] 글 상세 조회, 게시글 수정, 삭제 구현 (0) | 2022.03.13 |
[스프링부트 게시판 만들기] 게시글 작성, 게시글 리스트 출력 (0) | 2022.03.13 |
[스프링부트 게시판 만들기] IntelliJ 프로젝트 생성, MySQL 연동 (0) | 2022.03.13 |