이제 JpaRepository를 다루는건 어느정도 익숙해졌는데, JpaRepository를 사용하면서
객체를 조회할때 Paging를 이용한 정렬을 하는 방법을 알아보자
@GetMapping("/folders/{folderId}/products") public Page<ProductResponseDto> getProductsInFolder( @PathVariable Long folderId, @RequestParam("page") int page, @RequestParam("size") int size, @RequestParam("sortBy") String sortBy, @RequestParam("isAsc") boolean isAsc, @AuthenticationPrincipal UserDetailsImpl userDetails){
- 먼저,
Controller
에서 정렬의 기준이 되는 값들을 받아온다.
public Page<ProductResponseDto> getProductsInFolder(Long folderId, int page, int size, String sortBy, boolean isAsc, User user) { Sort.Direction direction = isAsc ? Sort.Direction.ASC : Sort.Direction.DESC; Sort sort = Sort.by(direction, sortBy); Pageable pageable = PageRequest.of(page,size,sort); Page<Product> productList = productRepository.findAllByUserAndProductFolderList_FolderId(user, folderId, pageable); Page<ProductResponseDto> responseDtoList = productList.map(ProductResponseDto::new);
- 그 다음,
Sort.Direction
을 통해 오름차순인지, 내림차순인지를 넣어주고,Sort sort = Sort.by()
를 통해 정렬기준을 넣어준다.- 그리고
Pageable pageable = PageRequest.of()
통해 PageRequest를 만들고,- 이후는 기존에 JpaRespository를 사용하는것 처럼 findBy에 pageable을 넣어주면 된다!
- Page는 객체 변환도 지원하기에 .map()을 통해 바로 객체 변환도 가능하다.
기존의 코드에서는 findBy로 먼저 객체들을 List로 가져온뒤, 해당 List를 정렬하는 방법으로
두번에 걸쳐서 정렬을 하였는데, Page를 사용하면 한번에 객체들을 정렬하면서 가져올 수 있다.
이전에 필요없는거 같아서 안들었던 강의를 시간이 남아서 들었는데,
예상외의 수확이 있었다! (JpaRepository에 Page사용법)
이제 팀프로젝트 까지 남은건 테스트 하는 법 정도 알려주는거 같은데, 안그래도 저번 프로젝트하면서 테스트하려고 DB를 몇번날린건지 모르겠다. 개꿀일거 같으니까 열심히 들어야겠다.
다음 프로젝트는 아웃소싱 프로젝트라는데, 이전 기수 아웃소싱 프로젝트를 검색해보니까
간단하게 외부 API(로그인, 지도 등등)를 적용해서 프로젝트 만드는거로 보여서 저번 프로젝트 처럼 가볍게 하면 될 거 같다(이번에는 프론트 구현 죽어도 안할예정).
내일 남은 강의 다 듣고 금요일에 어느정도 끝내놓고 주말 편하게 노는게 계획이다.
벌써 2월 말이라니 시간이 너무 빠르다.
정보처리기사 실기랑 영어시험 미뤄놨는데 슬슬 때가 되었다