728x90
글 검색 기능을 추가해보겠습니다. 제목,작성자,내용에 검색어가 포함된 글들만 리스트로 보여줄 예정입니다.
BoardController
@GetMapping("/board/search")
public String search(@RequestParam(value="keyword") String keyword, Model model) {
model.addAttribute("postList", boardService.searchPosts(keyword));
return "board/list.html";
}
여러분도 아시다시피 GET방식은 'localhost:8080?keyword=abcd' 로 값이 넘어오죠. REST API처럼 구현하고 싶은데 저는 실패를 했습니다.. 아무튼 저렇게 넘어온 값은 @RequestParam으로 받아올 수 있습니다. 받아온 keyword는 서비스로 넘겨줍니다.
BoardService
@Transactional
public List<BoardListDto> searchPosts(String keyword) {
return boardRepository.findAllSearch(keyword).stream()
.map(BoardListDto::new)
.collect(Collectors.toList());
}
findAllSearch(keyword)한 값을 리스트로 반환을 해주죠. Repository에서는 어떤 쿼리로 검색을 반환해줄까요??
BoardRepository
@Query(value = "SELECT b FROM Board b WHERE b.title LIKE %:keyword% OR b.content LIKE %:keyword% OR b.author LIKE %:keyword%"
)
List<Board> findAllSearch(String keyword);
SQL문에서는 A라는 문자열에 B라는 문자열이 포함되었는지를 LIKE를 통해서 필터링을 할 수 있습니다. %:keyword%의 경우에는 keyword라는 변수가 포함된 그런 컬럼값을 리턴하라는거죠. 저는 제목,작성자,내용 전부를 살펴볼 계획이었으니 OR로 계속 묶어줬습니다.
자 이렇게 해주시면 검색 기능도 마무리가 된답니다.
728x90
'web > spring&spring boot' 카테고리의 다른 글
[Spring] REST API 구현 (0) | 2021.11.07 |
---|---|
[spring boot] 스프링 부트 게시판 페이징 기능 구현하기 (0) | 2021.06.08 |
[spring boot] 스프링 부트 게시판 글 삭제 구현하기 (0) | 2021.06.05 |
[spring boot] 스프링 부트 게시판 수정하기 기능 추가 (0) | 2021.05.27 |
[spring boot] 스프링 시큐리티 세션 활용하기 (0) | 2021.05.21 |