728x90
JPA Repository
- findBy(컬럼이름): 컬럼에서 키워드를 넣어서 찾음 -> 정확하게 일치하는 데이터 검색
- findBy(컬럼이름)Containing: 컬럼에서 키워드가 포함된 것을 찾음 -> 키워드가 포함된 모든 데이터 검색
Repository에 내용 추가
@Repository
public interface BoardRepository extends JpaRepository<Board, Integer> { // 엔티티는 Board, PK의 타입은 Integer
Page<Board> findByTitleContaining(String searchKeyword, Pageable pageable); // 제목에 포함된 키워드를 찾는 메서드
}
Service에 내용 추가
// 게시글 리스트 처리
public Page<Board> boardList(Pageable pageable) {
return boardRepository.findAll(pageable);
}
public Page<Board> boardSearchList(String searchKeyword, Pageable pageable) { // 검색 기능 추가
return boardRepository.findByTitleContaining(searchKeyword, pageable);
}
Controller에 내용 추가
@GetMapping("/board/list")
public String boardList(Model model,
@PageableDefault(page = 0, size = 10, sort = "id", direction = Sort.Direction.DESC) Pageable pageable,
String searchKeyword) { // 검색 키워드를 searchKeyword로 전달 받음
Page<Board> list = null;
if (searchKeyword == null) { // 검색할 키워드가 들어오지 않은 경우 전체 리스트 출력
list = boardService.boardList(pageable);
} else { // 검색할 키워드가 들어온 경우 검색 기능이 포함된 리스트 반환
list = boardService.boardSearchList(searchKeyword, pageable);
}
int nowPage = list.getPageable().getPageNumber() + 1; // pageable이 가지고 있는 페이지는 0부터 시작하기때문에 1을 더함
int startPage = Math.max(nowPage - 4, 1); // 1보다 작은 경우는 1을 반환
int endPage = Math.min(nowPage + 5, list.getTotalPages()); // 전체 페이지보다 많은 경우는 전체 페이지를 반환
model.addAttribute("list", list);
model.addAttribute("nowPage", nowPage);
model.addAttribute("startPage", startPage);
model.addAttribute("endPage", endPage);
return "boardlist";
}
쿼리 스트링을 사용하여 11이 포함된 게시글의 제목을 검색하기
하지만 2페이지로 넘어가면 다음과 같이 검색이 풀려버리기때문에 &page=1을 추가로 요청해야 정상적으로 나타난다.
728x90
'스프링 부트 > [스프링 부트] 게시판 무작정 따라하기' 카테고리의 다른 글
[스프링 부트] 게시판 무작정 따라하기 - 5. 게시글 수정 (0) | 2023.03.13 |
---|---|
[스프링 부트] 게시판 무작정 따라하기 - 11. 검색 기능 2편 (0) | 2023.03.13 |
[스프링 부트] 게시판 무작정 따라하기 - 9. 페이징 처리 2편 (0) | 2023.03.13 |
[스프링 부트] 게시판 무작정 따라하기 - 8. 페이징 처리 1편 (0) | 2023.03.13 |
[스프링 부트] 게시판 무작정 따라하기 - 7. 파일 업로드 (0) | 2023.03.13 |