文章背景说明:
在使用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类型的参数注解格式该如何辨析 * 以注解方式存在一个技术难点想了好久一直没有攻破,特在此说明一下本人在使用注解方式没有找到以MongoDB中NumerLong类型的字段为参数时注解格式该如何编写!还望知道的可以加以指点? * * 根据 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还提供了多种公式供以查询使用,这里不做过多介绍。
相关推荐
mongoDB客户端工具MongoVUE 1.5.3破解 破解方法见"破解方法.txt
MongoDB .Net工具库MongoRepository的简单使用。 最近研究了一下MongoDB数据库,并使用了开源的在.net环境下的一个类库,Mongo仓库。对于数据的一些简单的操作非常好用,特记录供后期参考。 具体的使用过程如下: 一...
MongoDB管理工具 MongoVUE1.4,很好用的管理工具。
MongoDB分页插件 为MongoDB提供了开箱即用的分页能力. 详情参见我的博客 How to use Maven for instance. <repository> <id>jitpack.io <url>https://jitpack.io</url> </repository> For the latest release ...
mongodb 数据库基本操作 1、mongoDB的介绍 mongoDB是一个基于分布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。它介于关系数据库和非关系数据库之间,被认为是非...
mongodb driver 集成mongo和mongodb扩展 log.php 发送日志类
mongodb的工具mongovued安装包,含有激活方式
Api-MongoRepository.zip,官方mongodb c driverproject描述之上的存储库抽象层,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到对象...
MongoVUE是一个MongoDB在windwos下的客户端管理工具 MongoVUE是一个创新的MongoDB桌面应用Windows操作系统,给你一个优雅的、高度可用的GUI界面来使用MongoDB。现在有一个更少的担心在管理你的网络数据。 ngoVUE使...
MongoDB驱动包mongo-java-driver-2.10.1,可用缺少Mongo驱动使用,下载前先查看自己版本
MongoDB安装和配置,用MongoVUE连接MongoDB,shell,相关命令
用于Linux环境下安装Mongodb数据库。。。。。。。。。
Mongo存储库具有扩展功能的MongoDB的存储库模式MongoDB驱动程序版本2.11.4定义模型您不需要创建模型,但是如果这样做,则需要扩展Entity // If you are able to define your modelpublic class User : Entity { ...
介绍了高效mongodb的php分页类,并且没有使用mongodb的skip来实现分页,需要的朋友可以参考下,mongodb分页skip limit分页要先查出所有结果再去跳过,这样如果查询页面越往后效率越低。 如果能够通过查询条件查出...
spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够...
为MongoDB提供了开箱即用的分页能力.
前言前面讲解了如何在springboot中集成mongodb,本文将讲解mongodb命令操作及其MongoTemplate的使用。穿插的目的在于不用先去寻找m
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
mongodb-spark官方连接器,运行spark-submit --packages org.mongodb.spark:mongo-spark-connector_2.11:1.1.0可以自动下载,国内网络不容易下载成功,解压后保存到~/.ivy2目录下即可。
1.先安装Installer.msi原版程序,或是到http://www.mongovue.com/downloads/官网下载 2.将破解文件覆盖到安装目录即可