SpringData Jpa実現ページング機能実現方式二試用Slice受信

2964 ワード

以前ブログでは郭さんがJPAでページング機能をどのように実現するかを紹介していましたが、毎回sql文を書いて総本数countQueryを計算します.
前の記事への接続
前のリンク
インプリメンテーションコード
public interface XDMReviewTimeDao extends JpaRepository {

    @Query(nativeQuery = true,
            value = "select a.* , b.c_clientname as clientName , b.c_phone1 as clientPhone from XDM_Review_time a left join client_list b on a.c_clientid = b.id where a.c_appointment_day = ?1 ",
            countQuery = "select count(*) from XDM_Review_time where c_appointment_day = ?1")
    Page>> findAllReviewsByDay(String day, Pageable pageable);

    @Query(nativeQuery = true,
            value = "select a.* , b.c_clientname as clientName , b.c_phone1 as clientPhone from XDM_Review_time a left join client_list b on a.c_clientid = b.id where a.c_clientid = ?1 ",
            countQuery = "select count(*) from XDM_Review_time where c_clientid = ?1")
    Page>> findAllReviewsByClientId(String clientId, Pageable pageable);

    @Query(nativeQuery = true,
            value = "select a.* , b.c_clientname as clientName , b.c_phone1 as clientPhone from XDM_Review_time a left join client_list b on a.c_clientid = b.id where a.c_clientid = ?1 and a.c_appointment_day = ?2 ",
            countQuery = "select count(*) from XDM_Review_time where c_clientid = ?1 and c_appointment_day = ?2 ")
    Page>> findAllReviewsByClientIdAndDay(String clientId, String day, Pageable pageable);

    Long countByCCodeAndCSign(String code, String sign);
}


Pageの代わりにSliceを使用して戻り値を受信するスキーム
@Query(nativeQuery = true, value = "select a.* , b.c_clientname as clientName , b.c_phone1 as clientPhone from XDM_Review_time a left join client_list b on a.c_clientid = b.id where a.c_appointment_day = ?1 ")
Slice>> findAllReviewsByDay(String day, Pageable pageable);

@Query(nativeQuery = true, value = "select a.* , b.c_clientname as clientName , b.c_phone1 as clientPhone from XDM_Review_time a left join client_list b on a.c_clientid = b.id where a.c_clientid = ?1 ")
Slice>> findAllReviewsByClientId(String clientId, Pageable pageable);

@Query(nativeQuery = true, value = "select a.* , b.c_clientname as clientName , b.c_phone1 as clientPhone from XDM_Review_time a left join client_list b on a.c_clientid = b.id where a.c_clientid = ?1 and a.c_appointment_day = ?2 ")
Slice>> findAllReviewsByClientIdAndDay(String clientId, String day, Pageable pageable);

関連紹介:Pageは使用可能な要素とページの総数を知っています.カウントクエリは、ベースフレームワーク内でトリガーされ、合計数が計算されます.これは、使用するシーンに応じて高価な可能性があるため、Pageableを使用するとデフォルトでcout文が実行されます.一方、Sliceの役割は、次のSliceが利用可能かどうかだけを知り、countを実行しないため、大きな結果セットをクエリーするときは、データが十分であることだけを知っていればよく、関連するビジネスシーンも全部で何ページあるかに関心を持つ必要はありません.