当前位置: 首页 > 知识库问答 >
问题:

如何通过排序和分页使用Spring数据JPA开箱即用地查询数据?

经和洽
2023-03-14

我正在我的项目中尝试Spring data JPA。我想知道是否有现成的API可以通过排序和分页查询数据。当然,我知道我可以自己写这个方法,我只是想知道是否有现成的方法。我的DAO扩展了JpaRepository,我发现可以调用以下方法:

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

但是没有findAll(Sort排序,可分页可分页)这样的方法,所以我很好奇。

共有3个答案

刘英彦
2023-03-14

在2020年,接受的答案有点过时,因为PageRequest已弃用,所以您应该使用这样的代码:

Pageable page = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by("id").descending());
return repository.findAll(page);
闻人飞翼
2023-03-14

Pageable还有一个指定排序的选项。来自java文档

PageRequest(int page, int size, Sort.Direction direction, String... properties) 

使用应用的排序参数创建新的PageRequest。

吴腾
2023-03-14

有两种方法可以实现这一点:

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)。

 类似资料:
  • 问题内容: 我在我的项目中尝试使用Spring数据JPA。我想知道是否有现成的API通过和来查询数据。当然,我知道我可以自己编写该方法,我只想知道是否有一个现成的方法。我的DAO扩展,我发现可以调用以下方法: 但是没有这样的方法,所以我很好奇。 问题答案: 有两种方法可以实现此目的: 如您所见,第二种形式更加灵活,因为它允许为每个属性()定义不同的方向。

  • 问题内容: 我正在使用Spring Data JPA,当我用来定义一个 WITHOUT 的查询时,它可以工作: 但是,如果我添加第二个参数,则将无法正常工作,Spring将解析该方法的名称,然后抛出 异常 。这是错误吗? 问题答案: 在Spring论坛上提出了一个类似的问题,指出要应用分页,必须派生第二个子查询。因为子查询引用的是相同的字段,所以您需要确保查询对引用的实体/表使用别名。这意味着您在

  • 我试图指定一个用注释的存储库方法和一个带有对象的Pagable: 编辑1:此存储库正在扩展分页和排序存储库。 对象使用以下方法签名指定: 但生成的输出查询没有排序选项,例如: ...在我期待的时候: 这里有人遇到过这样的问题吗?我使用的是Spring Boot 1.5。x。

  • 我有一个场景,我想过滤、排序和分页3个表参与的结果。 目前,我使用Spring Data JPA的规范特性在单个实体上完成它:<代码>存储库。findAll(规范,页面请求)。 这工作得很好,但现在我有另一个场景,其中排序/过滤器属性分布在由一对多关系连接的3个表上。 以下是我的场景: 有没有一种方法可以使用PageRequest和Specification,其中customerNumber、it

  • 我使用了spring boot(1.3.5)、spring-data、spring-data-jpa、JPA(hibernate/hsqldb)。 代码: 控制器: 我试着 也是,但不起作用。 浏览器输出: SQL无效!额外的“:”和重复的“ASC ASC”。 控制台输出:

  • 我在Spring数据(JPA Hibernate MySQL)应用程序中使用NamedNativeQueries和SqlResultSetMappings,我已经成功地完成了分页,但没有完成排序。 我尝试了两种形式的查询: 第二种方法是在第二个查询中简单地使用计数符号,而不是使用#页面符号。 这两种方法都适用于分页,但忽略了排序。 这是存储库: 可分页页面的组装方式如下: 没有抛出错误,但排序没有