MongoDb 分页 SpringDataPageable MongoRepository
来源:互联网 发布:雕刻机路径编程软件 编辑:程序博客网 时间:2024/06/06 04:41
文章背景说明:
在使用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;
- @Repository
- public 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还提供了多种公式供以查询使用,这里不做过多介绍。
阅读全文
0 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分页优化
- 前端复习
- python数据分析与挖掘项目实战记录
- 实验五 二叉树的操作
- python K-Means聚类算法的实现
- 第8章 指针 ——指针变量做函数参数
- MongoDb 分页 SpringDataPageable MongoRepository
- C语言标准I/O库中流的读写与定位
- 第四周学习内容
- 疯狂Spring Cloud连载(24)Zuul路由配置
- HDU 5690-All X
- NSTimer的循环引用问题
- mysql存储过程案例(插入100条数据)
- Django项目
- hdoj-1711Number Sequence(数组Kmp)