jpa的Pageable和PageRequest的源码
Pageable
| --AbstractPageRequest
| --| --PageRequest
| --| --QPageRequest
| --Unpage
常用方法
Sort sort01 = new Sort ( Direction. ASC, "name" ) ;
Sort sort02 = Sort. by ( Direction. ASC, "name" ) ;
Order idOrder = new Order ( Direction. DESC, "id" ) ;
Order idOrder2 = new Order ( Direction. DESC, "name" ) ;
Sort sort03 = Sort. by ( idOrder, idOrder2) ;
Sort sort04 = Sort. by ( Direction. ASC, "id" , "name" ) ;
Sort sort05 = Sort. by ( "id" , "name" ) ;
int pageIndex = 1 ;
Pageable pageable = PageRequest. of ( pageIndex- 1 , 2 , sort01) ;
Pageable pageable02 = PageRequest. of ( pageIndex- 1 , 2 , Direction. ASC, "id" ) ;
Pageable pageable03 = PageRequest. of ( pageIndex- 1 , 2 , Direction. ASC, "id" , "name" ) ;
Pageable
package org. springframework. data. domain;
import java. util. Optional;
import org. springframework. util. Assert;
public interface Pageable {
static Pageable unpaged ( ) {
return Unpaged. INSTANCE;
}
default boolean isPaged ( ) {
return true ;
}
default boolean isUnpaged ( ) {
return ! isPaged ( ) ;
}
int getPageNumber ( ) ;
int getPageSize ( ) ;
long getOffset ( ) ;
Sort getSort ( ) ;
default Sort getSortOr ( Sort sort) {
Assert. notNull ( sort, "Fallback Sort must not be null!" ) ;
return getSort ( ) . isSorted ( ) ? getSort ( ) : sort;
}
Pageable next ( ) ;
Pageable previousOrFirst ( ) ;
Pageable first ( ) ;
boolean hasPrevious ( ) ;
default Optional< Pageable> toOptional ( ) {
return isUnpaged ( ) ? Optional. empty ( ) : Optional. of ( this ) ;
}
}
Unpaged
enum Unpaged implements Pageable {
INSTANCE;
public boolean isPaged ( ) {
return false ;
}
public Pageable previousOrFirst ( ) {
return this ;
}
public Pageable next ( ) {
return this ;
}
public boolean hasPrevious ( ) {
return false ;
}
public Sort getSort ( ) {
return Sort. unsorted ( ) ;
}
public int getPageSize ( ) {
throw new UnsupportedOperationException ( ) ;
}
public int getPageNumber ( ) {
throw new UnsupportedOperationException ( ) ;
}
public long getOffset ( ) {
throw new UnsupportedOperationException ( ) ;
}
public Pageable first ( ) {
return this ;
}
}
AbstractPageRequest
public abstract class AbstractPageRequest implements Pageable , Serializable {
private static final long serialVersionUID = 1232825578694716871 L;
private final int page;
private final int size;
public AbstractPageRequest ( int page, int size) {
if ( page < 0 ) {
throw new IllegalArgumentException ( "Page index must not be less than zero!" ) ;
}
if ( size < 1 ) {
throw new IllegalArgumentException ( "Page size must not be less than one!" ) ;
}
this . page = page;
this . size = size;
}
public int getPageSize ( ) {
return size;
}
public int getPageNumber ( ) {
return page;
}
public long getOffset ( ) {
return ( long ) page * ( long ) size;
}
public boolean hasPrevious ( ) {
return page > 0 ;
}
public Pageable previousOrFirst ( ) {
return hasPrevious ( ) ? previous ( ) : first ( ) ;
}
public abstract Pageable next ( ) ;
public abstract Pageable previous ( ) ;
public abstract Pageable first ( ) ;
}
PageRequest
public class PageRequest extends AbstractPageRequest {
private static final long serialVersionUID = - 4541509938956089562 L;
private final Sort sort;
@Deprecated
public PageRequest ( int page, int size) {
this ( page, size, Sort. unsorted ( ) ) ;
}
@Deprecated
public PageRequest ( int page, int size, Direction direction, String. . . properties) {
this ( page, size, Sort. by ( direction, properties) ) ;
}
@Deprecated
public PageRequest ( int page, int size, Sort sort) {
super ( page, size) ;
this . sort = sort;
}
public static PageRequest of ( int page, int size) {
return of ( page, size, Sort. unsorted ( ) ) ;
}
public static PageRequest of ( int page, int size, Sort sort) {
return new PageRequest ( page, size, sort) ;
}
public static PageRequest of ( int page, int size, Direction direction, String. . . properties) {
return of ( page, size, Sort. by ( direction, properties) ) ;
}
public Sort getSort ( ) {
return sort;
}
public Pageable next ( ) {
return new PageRequest ( getPageNumber ( ) + 1 , getPageSize ( ) , getSort ( ) ) ;
}
public PageRequest previous ( ) {
return getPageNumber ( ) == 0 ? this : new PageRequest ( getPageNumber ( ) - 1 , getPageSize ( ) , getSort ( ) ) ;
}
public Pageable first ( ) {
return new PageRequest ( 0 , getPageSize ( ) , getSort ( ) ) ;
}
public String toString ( ) {
return String. format ( "Page request [number: %d, size %d, sort: %s]" , getPageNumber ( ) , getPageSize ( ) , sort) ;
}
}
QPageRequest
public class QPageRequest extends AbstractPageRequest {
private static final long serialVersionUID = 7529171950267879273 L;
private final QSort sort;
public QPageRequest ( int page, int size) {
this ( page, size, QSort. unsorted ( ) ) ;
}
public QPageRequest ( int page, int size, OrderSpecifier< ? > . . . orderSpecifiers) {
this ( page, size, new QSort ( orderSpecifiers) ) ;
}
public QPageRequest ( int page, int size, QSort sort) {
super ( page, size) ;
this . sort = sort;
}
public Sort getSort ( ) {
return sort;
}
public Pageable next ( ) {
return new QPageRequest ( getPageNumber ( ) + 1 , getPageSize ( ) , sort) ;
}
public Pageable previous ( ) {
return new QPageRequest ( getPageNumber ( ) - 1 , getPageSize ( ) , sort) ;
}
@Override
public Pageable first ( ) {
return new QPageRequest ( 0 , getPageSize ( ) , sort) ;
}
}