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"); 
    * 可以去我的博客看看   
    * // 创建查询对象
    * 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;