我想在Spring应用程序中实现分页。我知道使用存储库,我们可以实现分页,但我们不能写我们自己的查询数据检索存储库中有限的方法,也没有方法接受查询类。春季自定义查询与可分页
如果我们想编写我们的自定义查询来从mongodb中检索数据,我们必须使用mongotemaplete,因为我知道mongotemplate我们不能实现分页。
是否有任何其他方式与db查询一起实现分页。 任何人都可以帮助我。
我想在Spring应用程序中实现分页。我知道使用存储库,我们可以实现分页,但我们不能写我们自己的查询数据检索存储库中有限的方法,也没有方法接受查询类。春季自定义查询与可分页
如果我们想编写我们的自定义查询来从mongodb中检索数据,我们必须使用mongotemaplete,因为我知道mongotemplate我们不能实现分页。
是否有任何其他方式与db查询一起实现分页。 任何人都可以帮助我。
通过扩展Spring数据PagingAndSortingRepository界面,你可以得到一些常用的方法,如保存,查找,和的findAll删除,你也可以添加自己的自定义查询:
public interface Repository extends PagingAndSortingRepository<Book, ID extends Serializable> {
// Common method
Page<Book> findAll(Pageable pageable);
// Custom query based on Spring Data naming convention
Page<Book> findByNameOrDescription(String name, String description, Pageable pageable);
}
使用MongoRepository。 扩展MongoRepository作为
public interface FooRepository extends MongoRepository<Foo,String> {
@Query(value="{'name': ?0}");
Page<Foo> findByMethod(String name, Pageable pageable);
}
然后,用它作为
Page fooPage = FooRepository.findByMethod('John', new PageRequest(0,20));
只是把它万一有人需要它。
SpringData具有自定义查询的方法:
final Pageable pageableRequest = new PageRequest(0, 2);
Query query = new Query();
query.with(pageableRequest);
当你想通了,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, XXX.class));
}
春库正在做的一样。正如你可以看到here,它们也会触发两个查询。
那个杀手参考!我正在寻找几个小时!的xD – Bowen 2017-11-29 17:56:47