我在我的项目中尝试使用Spring数据JPA。我想知道是否有现成的API通过Sort
和来查询数据Pageable
。当然,我知道我可以自己编写该方法,我只想知道是否有一个现成的方法。我的DAO扩展JpaRepository
,我发现可以调用以下方法:
findAll();
findAll(Pageable pageable);
findAll(Sort sort);
但是没有这样的方法findAll(Sort sort, Pageable pageable)
,所以我很好奇。
我在我的项目中尝试使用Spring数据JPA。我想知道是否有现成的API通过Sort
和来查询数据Pageable
。当然,我知道我可以自己编写该方法,我只想知道是否有一个现成的方法。我的DAO扩展JpaRepository
,我发现可以调用以下方法:
findAll();
findAll(Pageable pageable);
findAll(Sort sort);
但是没有这样的方法findAll(Sort sort, Pageable pageable)
,所以我很好奇。
Answers:
有两种方法可以实现此目的:
final PageRequest page1 = new PageRequest(
0, 20, Direction.ASC, "lastName", "salary"
);
final PageRequest page2 = new PageRequest(
0, 20, new Sort(
new Order(Direction.ASC, "lastName"),
new Order(Direction.DESC, "salary")
)
);
dao.findAll(page1);
如您所见,第二种形式更加灵活,因为它允许为每个属性(lastName ASC, salary DESC
)定义不同的方向。
Pageable也可以指定排序方式。从Java文档
PageRequest(int page, int size, Sort.Direction direction, String... properties)
使用排序参数创建一个新的PageRequest。
Spring Pageable包含一个排序。因此,如果您的请求具有值,它将返回排序的可分页。
请求:
domain.com/endpoint?sort=[FIELDTOSORTBY]&[FIELDTOSORTBY].dir=[ASC|DESC]&page=0&size=20
那应该返回按提供的顺序提供的按字段排序的可分页。
public List<Model> getAllData(Pageable pageable){
List<Model> models= new ArrayList<>();
modelRepository.findAllByOrderByIdDesc(pageable).forEach(models::add);
return models;
}