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。

推薦閱讀: