카테고리(제목/내용/작성자)를 선택 후 검색하는 기능을 만들어보자.
위 사진은 Jspmvc에서 구현한 모습이다.
SpringbootApi는 Postman가 클라이언트 역할을 하므로 값을 직접 넣어줘야한다
(변수 stype가 위 사진의 "제목"을 선택하는 부분, svalue가 검색하는 부분이다)
BoardJpaController의 @RequestParam
리스트 출력 페이지에 검색기능을 넣기위해서 url로 들어오는 검색값에
String형 null값을 허용하기 위해서 @RequestParam ( required = false ) 를 추가해줬다.
-> 검색을 위한 stype(카테고리), svalue(검색값) 값을 넣지않으면 원래의 전체 리스트를 보여주게 만들것이다.
@GetMapping(value = "/")
public ApiResponse<BoardDTO> getBoardList(@RequestParam int page, @RequestParam int size,
@RequestParam(required = false) String stype ,
@RequestParam(required = false) String svalue){
Page<Board> list = boardJpaService.getBoardList(page, size, stype ,svalue);
return new ApiResponse(true, list);
}
Service에 검색기능 코드를 작성
switch-case 문과 쿼리메소드로 작성하여 구현하였다.
- 검색값 svalue가 null이면 전체 리스트를 출력한다
- 카테고리 stype의 값에 따라서 사용자명, 내용, 제목 으로 검색이 가능하다
부분일치 검색을 위해 쿼리메소드에 들어가는 검색값 (svalue)에 직접 "%" 를 붙여줬다
public Page<Board> getBoardList(int page, int size, String stype, String svalue) {
PageRequest pageRequest = PageRequest.of(page, size);
if(svalue==null){
return boardRepository.findBoardsByIsDelOrderByReplyRootIdDescOrderNumAsc("N", pageRequest);
}
String svalue2 = "%"+svalue+"%";
switch (stype){
case "author":
return boardRepository.findBoardByIsDelAndAuthorLikeOrderByReplyRootIdDescOrderNumAsc("N",svalue2,pageRequest);
case "subject":
log.debug("1: "+stype +" 2: "+svalue);
return boardRepository.findBoardByIsDelAndSubjectLikeOrderByReplyRootIdDescOrderNumAsc("N",svalue2,pageRequest);
case "content":
return boardRepository.findBoardByIsDelAndContentLikeOrderByReplyRootIdDescOrderNumAsc("N",svalue2,pageRequest);
default:
return null;
}
실행화면
후기
1. 부분검색
"%"를 달지않고 부분값을 입력해서 값이 계속 안나와서 찾느라 좀 고생한거 말고는
jspmvc보다 훨씬 쉽게 구현했다.
2. switch-case
오랜만에 if문 말고 switch-case를 사용해봤는데 String이 들어간 switch문은
if문보다 성능이 훨씬 떨어진다고 한다..
(원래는 switch에 String을 넣을 수 없었는데 JDK 1.7 이후부터 String in switch Statements가 추가되었다)
'Spring Boot > Spring Boot' 카테고리의 다른 글
Spring boot JPA : Delete In (0) | 2022.07.27 |
---|---|
61 : 답글 깊이 제한 (SpringbootApi + JPA) (0) | 2021.11.06 |
60 : SpringbootApi 관련 질문 (0) | 2021.11.03 |
59 : jar & war 파일로 빌드하기 (0) | 2021.11.02 |
58 : 답글 구현하기 (SpringbootApi + JPA) (0) | 2021.11.01 |