Spring Data JPAデータの改ページと並び替えの方法



一、読み解き
数千万のリストデータを一度にロードすると、ページ上に表示されるのは非常に時間がかかります。大きなデータの照会結果を扱う際には、ページ別の照会が必要です。改ページクエリには必ず一定のソート規則が伴っています。そうでなければ、改ページデータの状態をコントロールすることが難しく、ユーザーは異なるページで同じデータを見ることができます。さて、この記事の主な内容は、Spring Data JPAを使ってページ分けと並べ替えを行う方法を紹介します。
二、実体定義
簡単なエンティティ定義を使います。Artcle(記事)

@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は、このクラスの対応データベースのテーブル名を指定します。このクラス名とデータベース名がラクダ峰及び下線規則に該当する場合は、この注釈を省略することができます。FlowTypeクラス名に対応して表名flow_タイプ
  • @Idはこのフィールドをテーブルのメインキーとして指定します。
  • @GeneratodieValue(strate=Generation Type.IDENTITY)は、メインキーの生成方式を指定しています。一般的なマスターキーが自己増加すると、Generation Type.IDENTITYの生成方式を採用します。
  • @Columnは一つのフィールドに対して、対応テーブルの一列を注釈します。nullable=falseはデータベースフィールドが空ではないことを示し、unique=trueはデータベースフィールドが重複値を持つことができないことを示し、length=32はデータベースフィールドの最大度が32であることを示します。
  • @Data、@AllArgs Controuctor、@Noargs Controuctor、@Buiderはすべてプラグインlombookの注釈で、set、get方法、コンストラクタなどの実体類のテンプレートコードを生成するのを助けます。
  • 三、Repository定義
    インターフェースArtcleRepositoryの継承を定義します。 Paging AndSortingRepositor。Paging AndSortingRepositoryインターフェースは基礎的な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);
    }
    四、改ページの実現
     Pagease. Springで定義されているインターフェースです。改ページパラメータの伝達のために、どのように使うかを見てみます。まず、ArtcleRepositoryを耐久層の操作を必要とするクラスに注入します。通常は@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を取得したいなら、get Conttent()法を使用することができる。しかし、笔者はこのように転换することを勧めません。先端には改ページリストがあります。データだけでなく、改ページ情报も必要です。現在の第数ページ、各ページの数、全部で何ページ、全部で何条ですか?これらの情報はPageオブジェクト内で入手できます。
    五、並べ替えを実現する
    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"));
    六、SliceとPage
    ArtcleRepositoryではSliceに戻る方法と別の方法がPageに戻る方法を見た。これらはみな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
     PageはSliceのサブインターフェースであり、以下に重要な方法がある。
    
    //   
    int getTotalPages();
    
    //     
    long getTotalElements();
    では、Sliceはいつ使いますか?いつPageを使いますか?
    この二つのインターフェースの関数定義によって、Sliceは次のスライス(改ページ)があるかどうかだけに関心があり、データベースcountに行って全体の行数、総ページ数を計算しないことが分かります。だから比較的に大きいデータ量のリストのマウスあるいは指に適してスクリーンの操作を滑って、全部で何ページがあるかに関心を持たないで、ただ次のページがあるかどうかに関心を持ちます。Pageは伝統的なアプリケーションのテーブル開発に適しています。総ページ数と総ページ数を知る必要があります。
    締め括りをつける
    以上は小编が绍介したSpring Data JPAのデータの改ページと顺位の方法です。皆さんに何かご迷惑があったらメッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
    本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。