Spring Data JPA 데이터 페이지 와 정렬 방법


안내
수천 개의 목록 데 이 터 를 한꺼번에 불 러 오 면 웹 페이지 에 표시 하 는 데 시간 이 많이 걸 리 고 사용자 체험 이 좋 지 않 습 니 다.따라서 비교적 큰 데이터 조회 결 과 를 처리 할 때 페이지 별 조 회 는 필수 적 이다.페이지 조 회 는 반드시 일정한 정렬 규칙 에 수반 되 어야 한다.그렇지 않 으 면 페이지 데이터 의 상 태 를 통제 하기 어려워 서 사용자 가 서로 다른 페이지 에서 같은 데 이 터 를 볼 수 있다.그렇다면 본 논문 의 주요 내용 은 Spring Data JPA 를 어떻게 사용 하여 페이지 와 순 서 를 나 누 는 지 소개 하 는 것 이다.
실체 정의
우 리 는 간단 한 실체 정 의 를 사용 합 니 다:Article(문장)

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name="article")
public class Article {

 @Id
 @GeneratedValue
 private Long id;

 @Column(nullable = false,length = 32)
 private String author;

 @Column(nullable = false, unique = true,length = 32)
 private String title;

 @Column(length = 512)
 private String content;

 private Date createTime;
}
  • @Entity 는 이 클래스 가 하나의 실체 클래스 이 고 JPA 제어 관 리 를 받 으 며 데이터베이스 에 대응 하 는 표
  • 라 고 밝 혔 다.
  • @Table 은 이러한 데이터베이스 에 대응 하 는 표 이름 을 지정 합 니 다.만약 이 클래스 이름과 데이터베이스 테이블 이름 이 낙타 봉 및 밑줄 규칙 에 부합된다 면 이 주 해 를 생략 할 수 있다.예 를 들 어 Flow Type 클래스 이름 대응 표 이름 flowtype。
  • @Id 이 필드 를 표 의 메 인 키 로 지정 합 니 다
  • @Generated Value(strategy=Generation Type.IDENTITY)는 메 인 키 의 생 성 방식 을 지정 합 니 다.일반 메 인 키 가 증가 하면 Generation Type.IDENTITY 의 생 성 방식
  • 을 사용 합 니 다.
  • @Column 주 해 는 한 필드 에 대해 표 의 열 에 대응 합 니 다.nullable=false 는 데이터베이스 필드 가 비어 있 으 면 안 된다 는 것 을 나타 낸다.unique=true 는 데이터베이스 필드 에 중복 값 이 있 으 면 안 된다 는 것 을 나타 낸다.length=32 는 데이터베이스 필드 의 최대 정 도 를 32 로 나타 낸다.
  • @Data,@AllArgs Constructor,@NoArgs Constructor,@Builder 는 모두 플러그 인 lombok 의 주석 으로 set,get 방법,구조 함수 등 실체 류 의 템 플 릿 코드 를 만 드 는 데 도움 을 줍 니 다.
  • 3.Repository 정의
    인터페이스 정의 ArticleRepository 계승 PagingAndSortingRepository。Paging AndSorting Repository 인 터 페 이 스 는 기본 적 인 CURD 함수 뿐만 아니 라 정렬,페이지 별 인터페이스 함수 정의 도 지원 합 니 다.
    
    public interface ArticleRepository extends PagingAndSortingRepository<Article,Long> {
      //  article      ,  Pageable    ,      SQL
     Page<Article> findAll(Pageable pageable);
     //  author    article   ,  Pageable    ,      SQL
     Page<Article> findByAuthor(String author, Pageable pageable);
     //  author   title  ,  article   ,  Pageable    ,      SQL
     Slice<Article> findByAuthorAndTitle(String author, String title, Pageable pageable);
    }
    4.페이지 나 누 기 실현
     Pageable Spring 이 정의 하 는 인터페이스 입 니 다.페이지 매개 변 수 를 전달 하 는 데 사 용 됩 니 다.어떻게 사용 하 는 지 보 겠 습 니 다.먼저 ArticleRepository 를 영구적 인 작업 이 필요 한 클래스 에 주입 합 니 다.보통@Service 주해 의 클래스 입 니 다.그리고 서비스 방법 에서 다음 과 같은 코드 를 사용 하여 페이지 를 나 누 어 작업 합 니 다.첫 페이지(0 부터)의 데 이 터 를 조회 하고 페이지 당 10 개의 데 이 터 를 조회 합 니 다.
    
    Pageable pageable = PageRequest.of(0, 10); //   
    //Pageable pageable = PageRequest.of(0, 10); //   
    //Pageable pageable = PageRequest.of(0, 10); //    
    //           
    Page<Article> articlePage = articleRepository.findAll(pageable);
    //        List
    List<Article> articleList = articlePage.getContent();
    findAll 방법 은 Page 류 의 대상 을 응답 으로 합 니 다.검색 결과 List 를 얻 으 려 면 getContent()방법 을 사용 할 수 있 습 니 다.그러나 필 자 는 이렇게 전환 하 는 것 을 건의 하지 않 는 다.전단 에 페이지 목록 을 보 여 주 는 것 은 데이터 뿐만 아니 라 페이지 정보 도 필요 하기 때문이다.예 를 들 어 현재 몇 페이지,각 페이지 마다 몇 페이지,모두 몇 페이지,모두 몇 페이지 입 니까?이 정 보 는 Page(articlePage)대상 에서 모두 얻 을 수 있 습 니 다.
    5.정렬 실현
    Spring Data JPA 에서 하 나 를 제 공 했 습 니 다.  Sort대상 은 정렬 체 제 를 제공 하 는 데 사용 된다.정렬 방식 을 봅 시다.
    
    articleRepository.findAll(Sort.by("createTime"));
    
    articleRepository.findAll(Sort.by("author").ascending()
          .and(Sort.by("createTime").descending()));
    첫 번 째 findAll 방법 은 createTime 의 오름차 순 으로 정렬 하 는 것 입 니 다.
    첫 번 째 findAll 방법 은 author 의 오름차 순 으로 정렬 한 다음 createTime 의 내림차 순 으로 정렬 하 는 것 입 니 다.
    페이지 를 나 누 어 정렬 하 다.
    
    Pageable pageable = PageRequest.of(0, 10,Sort.by("createTime"));
    6.Slice 와 Page
    ArticleRepository 에서 우 리 는 Slice 와 다른 방법 으로 페이지 로 돌아 가 는 방법 을 보 았 다.Spring Data JPA 의 데이터 응답 인터페이스 입 니 다. Page 예. Slice 의 하위 인터페이스.그것들 은 모두 데 이 터 를 저장 하고 되 돌려 주 는 데 쓰 인 다.
    6.1.Slice
    보 여 주세요. Slice 의 중요 한 방법 들
    
    List <T> getContent(); //       
    
    Pageable getPageable(); //         
    
    boolean hasContent(); //       ?
    
    boolean isFirst(); //        
    
    boolean isLast(); //         
    
    Pageable nextPageable(); //           
    
    Pageable previousPageable(); //           
    6.2.Page
     페이지 는 Slice 의 하위 인터페이스 입 니 다.다음은 중요 한 방법 입 니 다.
    
    //   
    int getTotalPages();
    
    //     
    long getTotalElements();
    그럼 슬라이스 는 언제 사용 하나 요?페이지 는 언제 사용 합 니까?
    답:이 두 인터페이스의 함수 정 의 를 통 해 알 수 있 듯 이 Slice 는 다음 조각(페이지)이 존재 하 는 지 에 만 관심 을 가지 고 데이터베이스 count 에 가서 총 항목 수,총 페이지 수 를 계산 하지 않 습 니 다.따라서 빅 데이터 리스트 에 적합 한 마우스 나 손가락 슬라이더 조작 은 총 몇 페이지 가 있 는 지 에 관심 이 없고 다음 페이지 가 있 는 지 에 만 관심 이 있다.Page 는 전통 적 인 응용 프로그램의 table 개발 에 비교적 적합 하 므 로 총 페이지 수 와 총 항목 수 를 알 아야 한다.
    총결산
    위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 Spring Data JPA 의 데이터 페이지 와 정렬 방법 입 니 다.여러분 께 도움 이 되 셨 으 면 합 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
    만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

    좋은 웹페이지 즐겨찾기