spring-data集成page分页

Springdata集成page分页分析

1、Page<>是一个遵循JPA规范的分页接口,里面的泛型是对应封装的domain类

2、下面代码主要是我在使用mongodb数据库时的,查询分页方法

3、Page<>本身只是一个接口,一般的分页插件或者自定义分页类都需要去返回一个分页结果集,也就是实例对象;所以这里就直接返回Page<>的实现类对象,PageImpl<>的构造器如下

public PageImpl(List<T> content, Pageable pageable, long total) {
    super(content, pageable);
    this.total = (Long)pageable.toOptional().filter((it) -> {
        return !content.isEmpty();
    }).filter((it) -> {
        return it.getOffset() + (long)it.getPageSize() > total;
    }).map((it) -> {
        return it.getOffset() + (long)content.size();
    }).orElse(total);
}
public PageImpl(List<T> content) {
	this(content, Pageable.unpaged(), null == content ? 0L : (long)content.size());
}
//其实也都要调用第一个构造器

List content:数据列表

Pageable pageable:封装分页数据对象,也就是currentPage 和 pageSize

total:数据总数

4、但是PageImpl的构造方法中,List content的是不能为null的,因为方法中调用了父类构造器super(content, pageable);

Assert.notNull(content, "Content must not be null!");

一旦为空就会报错

5、所以肯定是要先判断数据的数量的,方法如下

@Autowired
//1)创建mongodb查询模板
private MongoTemplate template; 

public Page<Region> query(RegionQueryObjecy qo) {
        //2)语句对象query  封装查询条件,在高级查询的时候使用
        Query query = new Query();
    	//3)判断数据的数量
        long total = template.count(query, Region.class);
        if (total==0){
            return Page.empty();
        }
		//4)PageRequest是封装查询方法,然后返回pageable对象,给PageImpl的构造方法使用
        Pageable pageable = PageRequest.of(qo.getCurrentPage() - 1, qo.getPageSize(), Sort.Direction.DESC, "_id");
    	//5)字太多放下面
        query.with(pageable);
    	//6)获取数据列表
        List<Region> list = template.find(query, Region.class);
		//7)获取查询结果集
        return new PageImpl<>(list,pageable,total);
    }

6)此时pageable和total都有了,还差个list,三大参数还差一个;因为有了pageable对象,可以用query的with方法,把pageable中的查询条件,一个个抽出来封装到query中,不然的话,就要一个一个重新加进去同query.skip(qo.getCurrentPage()).limit(qo.getPageSize()).with(new Sort(Sort.Direction.ASC,“id”));

7)这个例子主要是使用query与数据库交互查询获取list和total,然后再加个pageable就可以获取到查询结果集啦

博主码字不易,觉得有帮助的点个赞哦
在这里插入图片描述

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值