[스프링부트 게시판 만들기] JPA 사용 간단한 검색 기능 구현하기
my code archive
article thumbnail
반응형

스프링 레거시 프로젝트로 검색 기능을 구현할 때에는 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) 글 목록이 출력됨.
  • 페이징도 잘 됨.

 

이미지가 아닌 '이미'만 쳤을 때도 잘 나오는 것을 확인할 수 있다.

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형