Spring Data MongoDB 分页查询详解大数据

在上篇文章 Spring Data MongoDB 环境搭建 基础上进行分页查询

定义公用分页参数类,实现 Pageable 接口

import java.io.Serializable; 
import org.springframework.data.domain.Pageable; 
import org.springframework.data.domain.Sort; 
 
public class SpringDataPageable implements Serializable, Pageable { 
    private static final long serialVersionUID = 1; 
    // 当前页 
    private Integer pagenumber = 1; 
    // 当前页面条数 
    private Integer pagesize = 10; 
    // 排序条件 
    private Sort sort; 
 
    // 当前页面 
    @Override 
    public int getPageNumber() { 
        return getPagenumber(); 
    } 
 
    // 每一页显示的条数 
    @Override 
    public int getPageSize() { 
        return getPagesize(); 
    } 
 
    // 第二页所需要增加的数量 
    @Override 
    public int getOffset() { 
        return (getPagenumber() - 1) * getPagesize(); 
    } 
 
    @Override 
    public Sort getSort() { 
        return sort; 
    } 
 
    public Integer getPagenumber() { 
        return pagenumber; 
    } 
 
    public void setPagenumber(Integer pagenumber) { 
        this.pagenumber = pagenumber; 
    } 
 
    public Integer getPagesize() { 
        return pagesize; 
    } 
 
    public void setPagesize(Integer pagesize) { 
        this.pagesize = pagesize; 
    } 
 
    public void setSort(Sort sort) { 
        this.sort = sort; 
    } 
 
    @Override 
    public Pageable first() { 
        // TODO Auto-generated method stub 
        return null; 
    } 
 
    @Override 
    public boolean hasPrevious() { 
        // TODO Auto-generated method stub 
        return false; 
    } 
 
    @Override 
    public Pageable next() { 
        // TODO Auto-generated method stub 
        return null; 
    } 
 
    @Override 
    public Pageable previousOrFirst() { 
        // TODO Auto-generated method stub 
        return null; 
    } 
}

接口 PersonDao

/** 
 * 分页查询 
 * @param pageNum  开始页 
 * @return 
 */ 
public Page<Person> paginationQuery(Integer pageNum);

接口实现 PersonDaoImpl

public Page<Person> paginationQuery(Integer pageNum) { 
 
    SpringDataPageable pageable = new SpringDataPageable(); 
    Query query = new Query(); 
    List<Order> orders = new ArrayList<Order>();  //排序 
    orders.add(new Order(Direction.DESC, "age")); 
    Sort sort = new Sort(orders); 
 
    // 开始页 
    pageable.setPagenumber(pageNum); 
    // 每页条数 
    pageable.setPagesize(10); 
    // 排序 
    pageable.setSort(sort); 
    // 查询出一共的条数 
    Long count = mongoTemplate.count(query, Person.class); 
    // 查询 
    List<Person> list = mongoTemplate.find(query.with(pageable), Person.class); 
    // 将集合与分页结果封装 
    Page<Person> pagelist = new PageImpl<Person>(list, pageable, count); 
 
    return pagelist; 
}

测试

/** 
 * 分页查询 
 */ 
@Test 
public void paginationQuery(){ 
    Page<Person> persons = personDao.paginationQuery(2); 
    for(Person p : persons){ 
        System.out.println(p.getName()); 
    } 
}

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/9659.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论