MongoDB分页查询
- 作者:
- 淡白
- 创建时间:
- 2020-07-02 12:01:30
- MongoDB
摘要:这段代码是一个表格分页的示例,数据是从MongoDB中获取的。代码中定义了一个`PageResult`类来存储分页结果,包括页码、页面大小、总数、总页数和数据列表。然后,有一个`DmServiceImpl`类实现了一个`DmService`接口,具有各种根据条件查询的方法以及分页查询的方法。在分页查询的方法中,首先根据条件查询总条数,然后计算总页数。如果页码不合法,则设置为第一页。接下来,根据是否有最后一条数据的id来确定是使用普通分页还是使用有lastId的分页。最后,将查询结果封装到`PageResult`对象中返回。
分页
写个table分页,数据在mogodb找了个现有分页改了下.
PageResult
public class PageResult<T> {
/**
* 页码,从1开始
*/
private Integer pageNum;
/**
* 页面大小
*/
private Integer pageSize;
/**
* 总数
*/
private Long total;
/**
* 总页数
*/
private Integer pages;
/**
* 数据
*/
private List<T> list;
}
分页服务
public class DmServiceImpl implements DmService {
private static final int FIRST_PAGE_NUM = 1;
private static final String ID = "_id";
@Autowired
MongoTemplate mongoTemplate;
@Override
public PageResult<Dan> getDmList(Integer pageSize, Integer pageNum) {
return pageQuery(new Query(), pageSize, pageNum, null);
}
@Override
public PageResult<Dan> getDmListById(String id, Integer pageSize, Integer pageNum) {
return pageQuery(new Query(Criteria.where("_id").is(id)), pageSize, pageNum, null);
}
@Override
public PageResult<Dan> getDmListByYsJi(String ysJi, Integer pageSize, Integer pageNum) {
Query query = new Query(Criteria.where("player").is(ysJi));
return pageQuery(query, pageSize, pageNum, null);
}
@Override
public PageResult<Dan> getDmListByYsUsername(String username, Integer pageSize, Integer pageNum) {
Query query = new Query(Criteria.where("author").is(username));
return pageQuery(query, pageSize, pageNum, null);
}
@Override
public PageResult<Dan> pageQuery(Query query, Integer pageSize, Integer pageNum, String lastId) {
//条件查询总条数
long total = mongoTemplate.count(query, Dan.class);
//算页数
final Integer pages = (int) Math.ceil(total / (double) pageSize);
if (pageNum <= 0 || pageNum > pages) {
pageNum = FIRST_PAGE_NUM;
}
final Criteria criteria = new Criteria();
if (!StringUtils.isEmpty(lastId)) {
//有lastId的分页
if (pageNum != FIRST_PAGE_NUM) {
criteria.and(ID).gt(new ObjectId(lastId));
}
query.limit(pageSize);
} else {
//分页
int skip = pageSize * (pageNum - 1);
query.skip(skip).limit(pageSize);
}
final List<Dan> entityList = mongoTemplate
.find(query.addCriteria(criteria), Dan.class);
final PageResult<Dan> pageResult = new PageResult<>();
pageResult.setTotal(total);
pageResult.setPages(pages);
pageResult.setPageSize(pageSize);
pageResult.setPageNum(pageNum);
pageResult.setList(entityList);
return pageResult;
}
}