带有可分页的 Spring 自定义查询

标签 spring mongodb spring-data spring-boot spring-data-mongodb

我想在 Spring 应用程序中实现分页。我知道使用存储库我们可以实现分页,但我们不能编写自己的数据检索查询存储库中的方法有限,也没有接受查询类的方法。

如果我们想编写自定义查询来从 mongodb 检索数据,我们必须使用 mongotemaplete,因为我知道使用 mongotemplate 我们无法实现分页。

有没有其他方法可以实现分页以及数据库查询。 任何人都可以帮助我。

最佳答案

如您所见,MongoTemplate 不支持完整的页面抽象。就像 KneeLess 说的,您可以使用 @Query-Annotation 进行一些自定义查询。

如果这对您来说还不够,可以将 Spring Repository PageableExecutionUtils 与您的 MongoTemplate 结合使用。

例如这样:

@Override
public Page<XXX> findSophisticatedXXX(/* params, ... */ @NotNull Pageable pageable) {

    Query query = query(
            where("...")
            // ... sophisticated query ...
    ).with(pageable);

    List<XXX> list = mongoOperations.find(query, XXX.class);
    return PageableExecutionUtils.getPage(list, pageable,
              () -> mongoOperations.count((Query.of(query).limit(-1).skip(-1), XXX.class));
}

Spring 存储库也在做同样的事情。如您所见here ,它们也会触发两个查询。

关于带有可分页的 Spring 自定义查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27296533/

相关文章:

java - 限制所有类的 Jackson 序列化/反序列化深度

javascript - 如何在 Node.js 中使用带有 Promise 的 MongoDB?

mongodb - 错误 : Formula `mongodb-community` has not implemented #plist, #service 或安装了可定位的服务文件

java - Junit:为删除实体的方法编写测试?

spring - JpaRepository中的自定义删除方法

spring - 如何在spring mvc中的两个 Controller 之间传递对象?

java - Spring : how to get values from properties file in Model class

java - 如何从拦截器在 Spring 3.1 MVC Controller 上设置对象?

r - Mongolite 未将带有列表列的数据框正确插入 Mongodb

mysql - 如何在 JPA 中使用一个查询更新 3 个表?