我在我的项目中尝试Spring data JPA。我想知道Sort
和Pageable
是否有开箱即用的API来查询数据。当然,我知道我可以自己编写这个方法,我只是想知道是否有一个开箱即用的方法。我的DAO扩展了JpaRepository
,我发现我可以调用以下方法:
findAll();
findAll(Pageable pageable);
findAll(Sort sort);
但是没有findAll(Sort sort, Pageable pageable)
这样的方法,所以我很好奇。
答案 0 :(得分:151)
有两种方法可以实现这一目标:
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
)定义不同的方向。
答案 1 :(得分:13)
Pageable还可以选择指定排序。来自java doc
PageRequest(int page, int size, Sort.Direction direction, String... properties)
创建一个应用了排序参数的新PageRequest。
答案 2 :(得分:1)
在2020年,自profile.consent.given
被弃用以来,可接受的答案有点过时了,因此您应该使用如下代码:
PageRequest
答案 3 :(得分:0)
Spring Pageable包含一个排序。因此,如果您的请求具有值,它将返回一个已排序的可分页页面。
要求:
domain.com/endpoint?sort=[FIELDTOSORTBY]&[FIELDTOSORTBY].dir=[ASC|DESC]&page=0&size=20
这应该返回按提供的顺序提供的按字段排序的可分页。
答案 4 :(得分:0)
就我而言,要同时使用Pageable
和Sorting
,如下所示。在这种情况下,我使用分页并按id
降序对所有元素进行了排序:
modelRepository.findAll(PageRequest.of(page, 10, Sort.by("id").descending()))
与上面一样,根据您的要求,您也可以按2列对数据进行排序。
答案 5 :(得分:-1)
public List<Model> getAllData(Pageable pageable){
List<Model> models= new ArrayList<>();
modelRepository.findAllByOrderByIdDesc(pageable).forEach(models::add);
return models;
}