MongoDb 分页 SpringDataPageable MongoRepository
来源:互联网 发布:日晷怎么看时间 知乎 编辑:程序博客网 时间:2024/06/13 09:57
文章背景说明:
在使用Spring的环境下使用MongoDB进行分页查询。
前期准备:
1、在Spring中已经为MongoDB的查询提供了工具包,Maven目录如下所示:
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.2.0.RELEASE</version> </dependency>
2、定义公用分页参数类---需要实现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 = xxxxxx; // 当前页 private Integer pagenumber = 1; // 当前页面条数 private Integer pagesize = 10; //排序条件 private Sort sort; public void setSort(Sort sort) { this.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; }}
基于工具包spring-data-mongodb来进行MongoDB分页查询
第一方案:基于MongoRepository
优势:方便简单,方法实现由工具类完成。缺点:不适合多个可变查询条件。
定义的相当于Dao的类源码如下所示:DateTime(joda-time/joda-time/2.3/joda-time-2.3-sources.jar)
import org.joda.time.DateTime;import org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;import org.springframework.data.domain.Sort;import org.springframework.data.mongodb.repository.MongoRepository;import org.springframework.stereotype.Repository;@Repositorypublic interface PictureDataDetailRepository extends MongoRepository<T, String> { /** * 根据 sid字段分页查询 --- 根据方法名的命名规范来进行方法定义查询 * @param sid * @param pageable SpringDataPageable * @return */ public Page<T> findBySid(Long sid, Pageable pageable); /** * 根据 sid字段和时间段进行分页查询--- 根据方法名的命名规范来进行方法定义查询 * @param sid * @param beginTime 开始时间 * @param endTime 结束时间 * @param pageable * @return */ public Page<T> findBySidAndCreateTimeBetween(Long sid,DateTime beginTime,DateTime endTime, Pageable pageable); /** * 根据 sid字段和标题进行模糊查询--- 根据方法名的命名规范来进行方法定义查询 * @param sid * @param title 标题 * @param pageable * @return */ public Page<PictureDataDetail> findBySidAndTitleLike(Long sid,String title, Pageable pageable); /** * 未找到Long类型的参数注解格式该如何辨析 * <strong>以注解方式存在一个技术难点想了好久一直没有攻破,特在此说明一下本人在使用注解方式没有找到以MongoDB中NumerLong类型的字段为参数时注解格式该如何编写!还望知道的可以加以指点? </strong> * * 根据 tid和标题模糊、时间段分页查询 -- 根据方法的注解方式来进行查询跟方法名称无关 * @param tid * @param title 标题 --根据标题进行模糊查询 * @param beginTime 开始时间 -----时间段查询 * @param endTime 结束时间 * @param pageable SpringDataPageable * @return */ @Query(value="{'tid':?0,'title':{'$regex':?1,'$options':'i'},createTime':{'$gt':?2,'$lt':?3}}") public Page<T> query(String tid,String title,DateTime beginTime,DateTime endTime, Pageable pageable);}
调用时简单代码如下所示:
import org.springframework.data.domain.Page;import org.springframework.data.domain.Sort;import org.springframework.data.domain.Sort.Order;SpringDataPageable pageable = new SpringDataPageable();List<Order> orders = new ArrayList<Order>();orders.add(new Order(Direction.DESC, new Order(Direction.DESC, "createTime")));pageable.setSort(new Sort(orders));//每页显示条数pageable.setPagesize(queryBean.getPage().getSize());//当前页pageable.setPagenumber(queryBean.getPage().getStart());Page<t> page = repositoryDao.findBySid(183l,pageable);//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//DateTime d = DateTime.parse(sdf.format(new Date()));
第二方案:Query、Criteria、MongoTemplate,来进行手动编码指定查询条件分页,优点不废话直接上代码。
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.Page;import org.springframework.data.domain.PageImpl;import org.springframework.data.domain.Sort;import org.springframework.data.domain.Sort.Direction;import org.springframework.data.domain.Sort.Order;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.query.Criteria;import org.springframework.data.mongodb.core.query.Query; @Autowired MongoTemplate template; public List<T> query(){ //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); DateTime d1 = DateTime.parse(sdf.format(new Date())); DateTime d2 = DateTime.parse(sdf.format(new Date())); Query query = new Query(); Criteria criteria = new Criteria();//sid查询 criteria.and("sid").is(183l);//模糊查询 criteria.and("title").regex(".*?"+"fileName"+".*");//时间段查询 criteria.and("createTime").gte(d1).lte(d2);List<Order> orders = new ArrayList<Order>();orders.add(new Order(Direction.DESC, "createTime"));Sort sort = new Sort(orders); if (null != sort) { query.with(sort); } query.addCriteria(criteria);SpringDataPageable pageable = new SpringDataPageable();//开始页 pageable.setPagenumber(0);//每页条数 pageable.setPagesize(10);//排序 pageable.setSort(sort);//查询出一共的条数 Long count = template.count(query, T.class);//查询 List<T> list = template.find(query.with(pageable), T.class);//将集合与分页结果封装 Page<T> pagelist = new PageImpl<T>(list, pageable, count);return pagelist; }
以上为两种简单实现MongoDB 分页查询代码,在spring-data-mongodb还提供了多种公式供以查询使用,这里不做过多介绍。
转载自 : http://timerbin.iteye.com/blog/2144650
阅读全文
1 0
- MongoDb 分页 SpringDataPageable MongoRepository
- MongoDb 分页 SpringDataPageable MongoRepository
- MongoDB FAQ MongoRepository
- JAVA封装Mongodb操作之一:MongoRepository
- 总结MongoDB采用MongoRepository进行查询
- springboot集成mongodb使用mongoTemplate和MongoRepository
- Java操作MongoDB采用MongoRepository仓库进行条件查询
- Java操作MongoDB采用MongoRepository仓库进行条件查询
- Mongodb 分页
- Mongodb与spring集成(3)------MongoRepository实现增删改查和复杂查询
- Mongodb与spring集成(3)------MongoRepository实现增删改查和复杂查询
- Mongodb与spring集成 MongoRepository实现增删改查和复杂查询
- spring MongoDB 集成(分页)
- mongodb分页优化
- mongodb查询分页优化
- MongoDB分页处理方案
- Mongodb分页实现
- java MongoDB分页优化
- zedboard开发-建立Xilinx交叉编译环境
- jemalloc横向分析(二) rtree分析
- java简单的图片压缩
- java中this 和super比较
- struts2学习的截图
- MongoDb 分页 SpringDataPageable MongoRepository
- Floyd算法 最外层 迭代顺序 关系
- 安装与学习laravel
- SqlDataReader实例 HasRows属性与 Read()方法
- Python之模块
- solr DataImportHandler 导入数据
- Circos 教程___001
- Zookeeper开源客户端框架Curator简介
- JS数组原理