我想在 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/