我们继续研究spring jpa data,首先看看分页和排序的实现,在原来的代码中,我们如果希望实现分页,首先得创建一个Pager
的对象,在这个对象中记录total(总数),totalPager(总页数),pageSize(每页多少条记录),pageIndex(当前第几页),offset(查询时的offset)
,在Spring Data JPA中实现分页需要用到三个接口
- PagingAndSortingRepository
- Pageable
- Page
PagingAndSortingRepository是spring data jpa实现分页的工厂,用法和Repository完全一致,先看看源码
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort var1);
Page<T> findAll(Pageable var1);
}
第二个findAll
方法就是实现分页的方法,参数是Pageable
类型,同参数传入当前的分页对象(如:第几页,每页多少条记录,排序信息等),查询完成之后会返回一个Page
的对象。Page
对象中就存储了所有的分页信息。Pageable的源码如下
public interface Pageable {
int getPageNumber();
int getPageSize();
int getOffset();
Sort getSort();
Pageable next();
Pageable previousOrFirst();
Pageable first();
boolean hasPrevious();
}
Pageable是一个接口,它的实现类是PageRequest
,PageRequest有三个构造方法
//这个构造出来的分页对象不具备排序功能
public PageRequest(int page, int size) {
this(page, size, (Sort)null);
}
//Direction和properties用来做排序操作
public PageRequest(int page, int size, Direction direction, String... properties) {
this(page, size, new Sort(direction, properties));
}
//自定义一个排序的操作