Test data 를 만들었다. jpa 를 태그로 다 넣어주기로..
빌더의 문제 😫 set의 기본값이 셋팅이 안된다. null값..
다음과 같이 테스트 데이터가 다 채워졌음을 확인할 수 있다.
JPQLQuery<Study> pageableQuery = getQuerydsl().applyPagination(pageable, query);
QueryResults<Study> fetchResults = pageableQuery.fetchResults();
return new PageImpl<>(fetchResults.getResults(), pageable, fetchResults.getTotal());// 쿼리 실행, study의 목록을 가져올 수 있음
getQuerydsl을 가져온다. 이것은 QuerydslRepositorySupport가 지원해주고 있다. 여기 안에 보면 applyPagination 라는 게 있다. 이를 query에 적용해준다. 그럼 그게 적용된 (페이지가 적용된) query가 나온다.
fetch는 데이터만 가져온다. 따라서 fetchResults 를 사용해야 한다. 그래야 페이징과 관련된 데이터들도 같이 꺼내오기 때문이다. 이를 사용해서 페이지를 리턴! 이 때문에 pageImpl라는 구현체를 만들어준다. 첫번째 파라미터는 content list 이다.
search.html
page type 이 제공하는 기능들을 사용하면 된다. getTotalElements는 전체 개수를 의미한다. 이게 0 이면 없는 거니까 없는 메시지를 보여주면 된다.
MainController.java
@GetMapping("/search/study")
public String searchStudy(String keyword, Model model, @PageableDefault(size = 9, sort = "publishedDateTime",
direction = Sort.Direction.DESC)Pageable pageable) {
Page<Study> studyPage = studyRepository.findByKeyword(keyword, pageable);
model.addAttribute("studyPage", studyPage );
model.addAttribute("keyword",keyword); //화면에서 어떤 키워드로 조회했는지 알아야 하므로 keyword 넣어줌
return "search";
}
한 페이지의 기본 값이 20 이다. 기본값으로 9개만 조회하고 싶을 경우 , 기본 정렬 조건은 날짜로 할 것이다.
출처 : 인프런 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발