페이지네이션과 검색기능을 가지고 있는 DB를 설계한다.
public List<Book> selectListPageSearchBook(int page, String text);
@Override
public List<Book> selectListPageSearchBook(int page, String text) {
try {
Query query = new Query();
// 검색패턴( .*a.* => a가 포함된 것 해당)
Criteria criteria = Criteria.where("title").regex(".*" + text + ".*");
query.addCriteria(criteria);
Pageable pageable = PageRequest.of(page - 1, 10);
query.with(pageable);
// 정렬 (_id기준 내림차순)
Sort sort = Sort.by(Direction.DESC, "_id");
query.with(sort);
return mongoDB.find(query, Book.class);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Criteria criteria = Criteria.where("title").regex(".*" + text + ".*");
title에 text가 포함된 것을 찾는다.
controller
@GetMapping(value = "/selectlist")
public String getSelectlist(
@RequestParam(name = "page", defaultValue = "1") int page,
@RequestParam(name = "text", defaultValue = "") String text,
Model model) {
if (page == 0) {
return "redirect:/book/selectlist?page=1";
}
Pageable pagerequest =
PageRequest.of(page - 1, 10, Sort.Direction.DESC, "code");
List<Book> list = bookRepository.getBookList(text, pagerequest);
long pages = bookRepository.getBookCount(text);
System.out.println(pages);
model.addAttribute("pages", (pages - 1) / 10 + 1);
model.addAttribute("list", list);
return "book/selectlist";
}
defaultValue 생각해줄 것, int는 "숫자"로 넘겨주기!