Springboot

[Spring Boot] JpaRepository의 페이징 및 정렬 처리 하기

Jenny376 2023. 3. 22. 23:11
안녕하세요. hia의 개발 story입니다.

 

오늘은 JpaRepository를 이용해 페이징 처리와 정렬 처리를 해보려고 합니다. 

지난번에 만든 테이블에는 데이터가 부족하니 sample 테이블에 페이징을 볼 수 있는 데이터를 50개 정도 넣도록 하겠습니다. 

 

이제 CRUD 테스트를 위해 만들었던 SampleRepositoryTests를 이용해 계속 테스트를 해보겠습니다. 

페이징 처리 : findAll()

 

페이징 처리는 findAll() 메서드를 이용하면 됩니다. 

이때 findAll( )의 매개변수로 Pageable을 사용하면 Page <T>로 반환을 하게 되어있습니다. 

아래의 소스로 페이징 되어 나오는 데이터를 확인할 수 있습니다. 

@Test
public void pageTest(){

    Pageable pageable = PageRequest.of(0,10);

    Page<Sample> page = sampleRepository.findAll(pageable);

    System.out.println("총 페이지 : " + page.getTotalPages());
    System.out.println("전체 갯수 : " + page.getTotalElements());
    System.out.println("현재 페이지 번호 : " + page.getNumber());
    System.out.println("페이지당 데이터 갯수 : " + page.getSize());
}

전체 50개의 데이터를 10개씩 페이징 하여 한 페이지당 10개의 데이터를 가지고 있는걸 확인할 수 있습니다. 

 

 

 

이제 이걸 이용해 첫 페이지의 데이터를 출력해 보도록 합시다.

for(Sample sample : page.getContent()){
    System.out.println(sample);
}

아래 결과에서 처럼 현재 페이지 번호 0번의 데이터 10개를 불러왔습니다. 

 

페이지에 정렬 조건 추가 

 

이제 만들어진 페이지를 역순으로 정렬해보도록 하겠습니다.

Sort 타입을 통해 페이징시 정렬값을 전달 할 수 있습니다.

@Test
public void sortTest(){
    Sort sort = Sort.by("id").descending();

    Pageable pageable = PageRequest.of(0,10, sort);
    Page<Sample> page = sampleRepository.findAll(pageable);

    for(Sample sample : page.getContent()){
        System.out.println(sample);
    }
}

역순으로 정렬하여 출력하니 아래와 같이 나오는 것을 볼 수 있습니다. 

 

 

감사합니다.