如何通过Sort和Pageable使用Spring数据JPA开箱即用地查询数据?

时间:2012-05-10 03:26:32

标签: java spring jpa spring-data-jpa

我在我的项目中尝试Spring data JPA。我想知道SortPageable是否有开箱即用的API来查询数据。当然,我知道我可以自己编写这个方法,我只是想知道是否有一个开箱即用的方法。我的DAO扩展了JpaRepository,我发现我可以调用以下方法:

findAll();
findAll(Pageable pageable);
findAll(Sort sort);

但是没有findAll(Sort sort, Pageable pageable)这样的方法,所以我很好奇。

6 个答案:

答案 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)

就我而言,要同时使用PageableSorting,如下所示。在这种情况下,我使用分页并按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;
   }