Spring

Spring 페이지네이션(Pagination) with Spring Data JDBC

아메바개발 2022. 7. 4. 16:14

Repository

public interface MemberRepository extends PagingAndSortingRepository<Member, Long> {
}

Spring Data JDBC supports PagingAndSortingRepository to provide additional methods to retrieve entities using the pagination and sorting abstraction.

Spring Data JDBCPagingAndSortingRepository를 지원하여 페이지네이션 및 정렬 추상화를 사용하여 엔티티를 검색하는 추가 방법을 제공한다고 합니다. 이 Repository를 이용하면 쉽게 페이지네이션을 구현할 수 있습니다.
 

 

Controller

    @GetMapping
    public ResponseEntity getMembers(@RequestParam("page") @Min(1) int page, @RequestParam("size") @Min(1) int size) {
     
        Page<Member> members = memberService.findMembers(page-1,size);
        return new ResponseEntity<>(members, HttpStatus.OK);
    }

Service

 private MemberRepository memberRepository;
 
 public Page<Member> findMembers(int page, int size) {
        PageRequest pageable = PageRequest.of(page, size, Sort.Direction.fromString("DESC"), "memberId");
        return memberRepository.findAll(pageable);
    }

 

멤버를 페이지네이션하기 위해  Controller에  page와 size를 받는 getMembers라는 메서드와 memberService에 findMembers라는 메소드가 있다 가정하겠습니다.      

 

동작방식

1.Controller에서 멤버 페이징해서 찾아줘라는 요청이 들어옵니다.

2.  Pageable 인터페이스를 구현한 PageRequest를 이용 page,size,오름차순 or 내림차순, 어떤걸 기준을 정렬을 할것인지

를 작성하여 변수로 만들어주고 이를 findAll을 할때 매개변수로 전해주어 select을 진행 할시 알맞은 페이지네이션이 되게 되어 나오게 만듭니다.

    PageRequest pageable = PageRequest.of(page, size, desc or asc , 정렬기준);

Service에서 PagingAndSortingRepository를 상속 받은 memberReopository를 이용 findAll로 페이징 되어있는 값을 리턴합니다.

 

 

 

 

Page<Member> (Member는 content부분에 나올 entity형식인거같습니다) 로 리턴이 되는데 이를 postman에서 출력하게되면 위와같은 사진처럼 출력이 됩니다.

 

만약 원하는 값만 출력하고 싶다면  리턴된 Page<> 값을 가져가 Mapper를 이용 원하는 형식으로 변환해서 출력하면 됩니다.

 

 

 

참조

https://javabydeveloper.com/spring-data-jdbc-pagination-and-sorting-example/#1-2-entity-to-work-on-paging-and-sorting