SpringBoot中JPA實現Sort排序的三種方式小結
引言: 在Spring Boot應用中,基於數據某個字段進行排序是一個非常常用的需求,這裡將給出Sort的三種常用用法,基於分頁的應用,大傢可以各取所需,擇機使用。
環境說明
Spring 4.2 Spring Boot 1.5.11 Java 8
前置說明
ECardEntity.java的定義:
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import com.jd.ai.fasion.util.BaseEntity; import lombok.Data; import lombok.EqualsAndHashCode; @Entity @Table(name="t_ebusiness_card") @Data @EqualsAndHashCode(callSuper=true) public class ECardEntity extends BaseEntity { private static final long serialVersionUID = 6580526495176090890L; @Column private String name; @Column(name="zip_url") private String zipUrl; @Column(name="thumb_url") private String thumbUrl; @Column(name="seq_num") private int seqNum; }
這裡的seqNum是排序字段,基於升序來排序。
Repository的定義:
@Repository public interface EBusinessCardRepository extends JpaRepository<ECardEntity, Long> { ///方法的定義 }
方法1: 基於特殊參數的排序
建立分頁對象:
Pageable pageable = new PageRequest(pageNum, size);
在Repository中定義相應的方法:
Page<ECardEntity> findByOrderBySeqNumAsc(Pageable pageable);
這裡使用默認的字段拼接形成的方法名,從而自動解析形成對應的方法。
方法2: 基於自定義的@Query進行排序
Pageable的對象定義與方法1中相同。
在Repository中定義相應的JPL語句:
@Query("select e from ECardEntity e ORDER BY e.seqNum ASC") Page<ECardEntity> findInOrders(Pageable pageable);
方法3: 基於Pageable中的Sort字段
Pageable對象的聲明:
Sort sort = new Sort(Direction.ASC, "seqNum"); Pageable pageable = new PageRequest(pageNum, size, sort);
這裡將Sort字段作為構造方法的入口參數,創建瞭Pageable對象。
在Repository無需聲明任何新的方法,直接使用JpaRepository中繼承而來的findAll(Pageable pageable)方法即可。
在Service中調用具體Repository中的方法如下:
Page<ECardEntity> eCardEntities = this.eCardRepo.findAll(pageable);
總結
這幾種方法都是非常簡單易用的,這裡對於這個排序的簡單需求來說,方法是最為簡單的,無需在Repository進行任何的方法聲明直接使用即可。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- SpringBoot2 實現JPA分頁和排序分頁的案例
- 詳解使用Spring Data repository進行數據層的訪問問題
- 基於JPA的Repository使用詳解
- spring data jpa @Query註解中delete語句報錯的解決
- Spring Boot JPA Repository之existsBy查詢方法失效的解決