java使用mongodb分页查询案例


@Override
public Response chipListByPage(ChipPageListParam request) {
//查询条件
Query query = new Query();
Criteria criteria = new Criteria();
if (StringUtils.isNotBlank(request.getTitleLike())) {
Pattern pattern = Pattern.compile("^.*" + request.getTitleLike() + ".*$", Pattern.CASE_INSENSITIVE);
criteria = criteria.and("chipName").regex(pattern);
}
if (StringUtils.isNotBlank(request.getPartnersId())) {
criteria = criteria.and("partnersId").is(request.getPartnersId());
}
Integer pageNum = request.getPageNum();
if (pageNum == null || pageNum <= 0) {
pageNum = 1;
}
Integer pageSize = request.getPageSize();
if (pageSize == null || pageSize <= 0) {
pageSize = 10;
}

//mongodb分页查询核心代码
Query countQuery = new Query(criteria);
long totalCount = mongoTemplate.count(countQuery, RedChip.class);
query = query.limit(pageSize).skip((pageNum - 1) * pageSize);
query = query.addCriteria(criteria);
query = query.with(Sort.by(Sort.Order.desc("createTime")));
List<RedChip> redChips = mongoTemplate.find(query, RedChip.class);
// 转换vo
List<ChipListVO> chipListVOS = JSON.parseArray(JSON.toJSONString(redChips), ChipListVO.class);
for (ChipListVO item: chipListVOS
) {
if(StringUtils.isBlank(item.getBatchCode())|| Objects.isNull(item.getSuitPlatformId())|| Objects.isNull(item.getActiveRelatedStatus()))
continue;
if(item.getSuitPlatformId().equals(RedChipDetailSuitEnum.LiZan.getValue()) && 1 == item.getActiveRelatedStatus()){
item.setPacketTitle("("+item.getBatchCode()+")");
}
}
Page<ChipListVO> page = new Page<>();
page.setRows(chipListVOS);
page.setTotalCount(totalCount);
BigDecimal totalPage = new BigDecimal(totalCount);
totalPage = totalPage.divide(new BigDecimal(request.getPageSize()), RoundingMode.CEILING);
page.setTotalPage(totalPage.longValue());
page.setPageNum(pageNum);
page.setPageSize(pageSize);
return Response.success(page);
}


//分页类
@ApiModel(value = "分页参数")
@Data
public class BasePageParam implements Serializable {
/**
* 当前页页码
*/
@ApiModelProperty(value = "当前页页码")
@NotNull(message = "缺少分页参数: pageNum")
@Min(value = 1)
private Integer pageNum;
/**
* 每页记录数
*/
@ApiModelProperty(value = "每页记录数")
@NotNull(message = "缺少分页参数: pageSize")
@Min(value = 1)
private Integer pageSize;
}
/**
* 分页类
*/
@Getter
@Setter
public class Page<T> extends BasePageParam {
//总页数
private long totalPage;

//总记录数
private long totalCount;

//每页显示集合
private List<T> rows;
}




 

posted on 2020-06-11 11:26  贾广祥  阅读(3036)  评论(0编辑  收藏  举报

导航