[DataJpa] DataJpa 페이징과 정렬

스프링 데이터 JPA 의 페이징 과 정렬에 대해

  • SortPageable 2 가지의 특별한 파라미터 제공

주요 기능

  1. Sort
    1. 정렬 기능을 제공
  1. Pageable
    1. 페이징 기능을 제공하고 내부적으로 Sort 를 포함함

사용

  • Pageable 의 사용
    Page<Item> findByPriceGreaterThan(float price, Pageable pageable);
    • 예제에서는
    PageRequest pageRequest = new PageRequest(0, 10, new Sort(Sort.Direction.DESC, "name"));
    Page<Member> result = memberRepository.findByNameStartingWith("김", pageRequest);
    • 이런식으로 요구하는데
    • data jpa 3 에서는
    PageRequest pageRequest = PageRequest.of(0, 10, Sort.by(DESC, "price"));
    • 이런식으로 호출하도록 변경이 된 것 같다.
    @Test
    void testPageble() {
        PageRequest pageRequest = PageRequest.of(0, 10, Sort.by(DESC, "price"));
        Page<Item> byPriceGreaterThan = itemRepository.findByPriceGreaterThan(2000, pageRequest);
        System.out.println("byPriceGreaterThan = " + byPriceGreaterThan.getContent());
    }
    select i1_0.id,i1_0.name,i1_0.price,i1_0.stock_quantity from item i1_0
     where i1_0.price>2000.0
     order by i1_0.price desc
     limit 0,10;
    
    select count(i1_0.id) from item i1_0 where i1_0.price>2000.0;
    
    byPriceGreaterThan = [Item(id=20, name=item19, price=19000.0, stockQuantity=19),
     Item(id=19, name=item18, price=18000.0, stockQuantity=18), 
    Item(id=18, name=item17, price=17000.0, stockQuantity=17), 
    Item(id=17, name=item16, price=16000.0, stockQuantity=16),
     Item(id=16, name=item15, price=15000.0, stockQuantity=15),
     Item(id=15, name=item14, price=14000.0, stockQuantity=14),
     Item(id=14, name=item13, price=13000.0, stockQuantity=13), 
    Item(id=13, name=item12, price=12000.0, stockQuantity=12),
     Item(id=12, name=item11, price=11000.0, stockQuantity=11), 
    Item(id=11, name=item10, price=10000.0, stockQuantity=10)]
    • select 와 count 쿼리가 순차적으로 날아가며
    • Page 객체에 담기게된다.
      • getTotalPages → 총 페이지수
      • getContent → 본문 리스트

    Page 인터페이스 메소드

    • int getNumber(): 현재 페이지 번호
    • int getSize(): 페이지 크기
    • int getTotalPages(): 전체 페이지 수
    • long getTotalElements(): 전체 데이터 수
    • List<T> getContent(): 조회된 데이터
    • boolean hasNextPage(), boolean isLastPage() 등: 페이지 네비게이션 관련 메소드
    • Sort getSort(): 정렬 정보
    • Pageable nextPageable(), Pageable previousPageable(): 다음/이전 페이지 객체


Uploaded by N2T