springboot集成MongoDB时,需要进行分页操作,但是,MongoDB他是没有现成的分页操作的,所以需要自己去实现,想想以前做分页操作的时候具体的类中有哪些属性。
例如:currentPage 当前页
pageSize 每页的显示的条数
data 需要显示的数据
totalCount 总的数据条数
prePage 上一页
nextPage 下一页
totalPage 总页数
那么接下来就好办了
在MongoDB中在分页而且还带条件 那么是不是先拼接你想要的条件 这时是不是得需要一个Query
//创建查询对象
Query query = new Query();
那么带条件 带条件的话按照我们平常的做法是不是先判断有没有这个条件喔!有的话我们才拼接,没有那还管他干嘛,是不是。
private MongoTemplate template;
if(条件 != null){ //此条件一般会在qo里面 ,就是自己定义的XxxxQuery qo
/**
* 这里不知道你们是否还记得
* 构建条件的对象
* Criteria criteria = Criteria.where("name").is("wudada");
* 可以去我的博客看看 https://editor.csdn.net/md/?articleId=124403576
* // 创建查询对象
* Query query = new Query();
* // 添加限制条件
* query.addCriteria(criteria);
*/
Criteria criteria = Criteria.where("条件列").is("条件值");
query.addCriteria(criteria); //这样我们就把需要的条件拼接好了
}
//然后这里还有一个特殊的类或者服务 就像reids一样 有一个private MongoTemplate template;
//template这个对象里面有许多方法 其中我们需要带条件查出数量 有一个count方法
//这里的参数一 是条件查询对象 参数二 是你需要对那个domain实体类,一般都是分页的泛型对象
Long totalCount = template.count(query,Xxx.class);//这样就查到带条件的所查的数量
//这里有一个细节 就是当这个totalCount 是等于 0 的话 那就没必要进行分页了 直接return就好了,但是最好不要返回一个null。
if (totalCount == 0) {
return Page.empty(); //我们可以返回这样的一个数据
}
//当totalCount不为0时,那么它是有数据的 这时才进行对他分页操作
//添加分页的条件 框架中有那么一个类PageRequest里面有一个方法
//参数一 当前页 一般都是0开始 参数二 每页显示条数
Pageable pageable = PageRequest.of(qo.getCurrentPage() - 1, qo.getPageSize());
//把分页的条件也拼上去
query.with(pageable);
//把带条件带分页的数据即data查出来 得到list集合
//参数一 是条件 参数二是是你需要对那个domain实体类,一般都是分页的泛型对象
List<Xxxx> data = template.find(query, Xxxx.class);
//参数一 所有数据 参数二 分页条件 参数三 总数
PageImpl<Xxxx> page = new PageImpl<Xxxx>(data,pageable,totalCount);
return page;