自我推荐

一、使用limit和skip进行分页查询

public List<User> pageList(int pageNum ,int pageSize){List<User> userList = new ArrayList<>();Mongo mg = new Mongo();DB db = mg.getDB("data");DBCollection coll = db.getCollection("t_user");DBCursor limit = coll.find().skip((pageNum-1)*pageSize).sort(new BasicDBObject()).limit(pageSize);while (limit.hasNext()){userList.add(parse(new User(),limit.next()));}return userList;
}private User parse(User user,DBObject obj){user.setAge((int) obj.get("age"));user.setName((String)obj.get("name"));user.setPwd((String)obj.get("pwd"));return user;
}//查询结果 1,2
[{"id": null,"name": "ljl","pwd": "123456","age": 24},{"id": null,"name": "lsr","pwd": "123456","age": 18}
]

通过skip和limit方法可以简单的实现分页操作,但是如果数据量特别巨大的时候,会出现性能的问题,建议不使用!

二、通过原生的方法实现条件查询、分页和排序

public Page<User> getPageByOriginalFunction(int age,int pageNUmber,int pageSize){//查询条件,可以传递多个查询条件User user = new User();user.setAge(age);Example<User> example = Example.of(user);//分页条件//Pageable pageable = new PageRequest(pageNUmber,pageSize);Pageable pageable = PageRequest.of(pageNUmber,pageSize);return secondRepository.findAll(example,pageable);}//查询结果
{"content": [{"id": "5cfb69ee4332ce07b864d12e","name": "lsr","pwd": "123456","age": 18}],"pageable": {"sort": {"sorted": false,"unsorted": true},"offset": 0,"pageSize": 2,"pageNumber": 0,"unpaged": false,"paged": true},"last": true,"totalPages": 1,"totalElements": 1,"number": 0,"size": 2,"sort": {"sorted": false,"unsorted": true},"first": true,"numberOfElements": 1
}

三、通过实现Pageable接口,自定义

1.创建自定义分页类,实现Pageable接口

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import javax.validation.constraints.Min;@NoArgsConstructor
@AllArgsConstructor
public class SpringDataPageAble implements Pageable {@Min(1)private Integer pageNumber = 1;@Min(1)private Integer pageSize = 10;private Sort sort;public void setSort(Sort sort) {this.sort = sort;}// 当前页面@Overridepublic int getPageNumber() {return this.pageNumber;}// 每一页显示的条数@Overridepublic int getPageSize() {return getPagesize();}// 第二页所需要增加的数量@Overridepublic long getOffset() {return (getPageNumber() - 1) * getPagesize();}@Overridepublic Sort getSort() {return sort;}public void setPagenumber(Integer pagenumber) {this.pageNumber = pageNumber;}public Integer getPagesize() {return this.pageSize;}public void setPagesize(Integer pagesize) {this.pageSize = pagesize;}@Overridepublic Pageable next() {return null;}@Overridepublic Pageable previousOrFirst() {return null;}@Overridepublic Pageable first() {return null;}@Overridepublic boolean hasPrevious() {return false;}
}

2.在repository层定义分页方法

import com.tedu.huawei.entity.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;public interface UserFirstRepository extends MongoRepository<User,String> {Page<User> getUserByAgeGreaterThan(int age, Pageable pageAble);
}

3.service层调用方法

public Page<User> getUserByAgeGraterThan(int age, int pageNumber,int pageSize){SpringDataPageAble springDataPageAble = new SpringDataPageAble(pageNumber,pageSize,new Sort(Sort.Direction.ASC,"age"));return firstRepository.getUserByAgeGreaterThan(age,springDataPageAble);
}

查询结果显示

{"content": [{"id": "5cfb66114332ce07b864d12d","name": "lsr","pwd": "123456","age": 18},{"id": "5cfb85084332ce4ffca97907","name": "panzi","pwd": "654321","age": 24}],"pageable": {"pageNumber": 1,"pageSize": 2,"sort": {"sorted": true,"unsorted": false},"offset": 0,"pagesize": 2,"unpaged": false,"paged": true},"last": true,"totalPages": 1,"totalElements": 2,"number": 1,"size": 2,"sort": {"sorted": true,"unsorted": false},"first": false,"numberOfElements": 2
}

四、总结

第一种方式实现简单方便,但是不适用于大数据量。第二种分页是原生的方法,不需要做额外的处理,但是查询条件单一,不能设置大于等于或者在某某之间,以及模糊查询有很大的限制。第三种方式实现也很简单,但是更加开放和使用性能好。 这个是我的微信公众号,欢迎扫码关注,谢谢!

分页条件查询_mongodb多条件分页查询的三种方法相关推荐

  1. python if多条件并列判断的三种方法

    python if多条件并列判断的三种方法 如果使用python的if进行多个条件表达式的判断呢?下面介绍三种方法: 使用and或or来连接多个条件表达式,比如条件1 and 条件2 and条件3等等 ...

  2. sql oracle分页查询,【SQL】Oracle分页查询的三种方法-Oracle

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; 按照学生ID排名 ...

  3. 查询Linux系统最后重启时间的三个方法

    对于在Linux平台开发或运维的工程师来说,经常需要查询系统最后一次重启的时间,这篇文章将给大家介绍三种方法: 方法一:last命令 # last reboot reboot system boot ...

  4. Mysql剖析单条查询三种方法

    三种方法: SHOW PROFILE SHOW STATUE 检查慢查询日志 SHOW PROFILE能帮助我们定位到哪些活动花费了最多的时间,但并不会告诉我们为什么会这样. SHOW STATUE是 ...

  5. 查询范围_企二哥:查询企业经营范围的三种方法

    一.查询企业经营范围的三种方法 1. 进经营地的工商局网站,有个"全国企业信用信息公示系统"进去后输入公司名称搜索就出来了. 2. 有个软件叫做天眼查,打开天眼查输入要查询的公司名 ...

  6. unix c线程同步的三种方法:互斥量、读写锁以及条件变-xhb8413-ChinaUnix博客

    unix c线程同步的三种方法:互斥量.读写锁以及条件变-xhb8413-ChinaUnix博客 unix c线程同步的三种方法:互斥量.读写锁以及条件变 2012-03-30 14:42:38 分类 ...

  7. linux工程师如何查询时间,查询Linux系统最后重启时间的三个方法

    对于在Linux平台开发或运维的工程师来说,经常需要查询系统最后一次重启的时间,这篇文章将给大家介绍三种方法: 方法一:last命令 # last reboot reboot system boot ...

  8. 如何使用计算机查询本机网卡信息,本机mac地址查询的三种方法

    现在电脑非常流行,大部分的学生以及白领或者说每一个家庭几乎都有一台电脑.不过大家对于电脑的认识却没有这么高的普及度.很多人对于它的了解仅仅停留在使用电脑看视频用软件的层面,对于电脑自身的认识不是很多. ...

  9. SCI期刊名缩写查询的三种方法

    SCI期刊名缩写查询的三种方法 在参考文献中,常会用到期刊的缩写名,这里介绍三种用于查询SCI期刊名缩写的方法,便于查询各个期刊的缩写. 1.方法一 进入justscience查询, https:// ...

  10. 怎样知道android的手机号码,如何查询自己的手机号码?看完这三种方法,再也不用担心了...

    原标题:如何查询自己的手机号码?看完这三种方法,再也不用担心了 导语:现在智能手机如此盛行的时代,相信很多人有不止一部手机,这样就会出现自己的手机号码记不住的情况,身边经常有朋友遇到过自己的号码也记不 ...

最新文章

  1. HAProxy高可用配置视频教程
  2. WPF and Silverlight 学习笔记(九):WPF布局管理之Canvas、InkCanvas
  3. 简约之美Jodd-http--深入源码理解http协议
  4. 浏览器字体大小设置_CSS之 浏览器解析样式的过程
  5. 在Global中Application_Error事件处理错误信息
  6. python开发自动化测试工具_Moler首页、文档和下载 - Python 编写真的自动化测试工具包 - OSCHINA - 中文开源技术交流社区...
  7. Spring Boot初识(2)- Spring Boot整合Mybaties
  8. 40个良好用户界面设计Tips
  9. poi下载excel模板
  10. 如何在vue中使用阿里图标库
  11. YUV格式与RGB格式
  12. 【单片机基础篇】共阴级四位数码管
  13. 前端微信公众号开发,前端开发规范手册
  14. Git:版本控制控制软件
  15. 计算机运行异常怎么办,电脑启动异常怎么办
  16. 通过身份证号码得到性别和出生日期
  17. Pthon中的输出函数
  18. 【LOJ #3084】【GXOI / GZOI2019】—宝牌一大堆(DP)
  19. 教你如何生一个漂亮宝宝
  20. iOS 探讨之 CADisplayLink

热门文章

  1. java io flush_《文件传输基础——Java IO流》,对其中flush方法的思考
  2. 三月磨一剑---也来晒晒我们的开发产品 欢迎拍砖
  3. flex 布局下侧轴的方向
  4. ID3/C4.5/Gini Index
  5. 多线程学习笔记二 - 多线程与单例模式
  6. SQL Server 索引结构及其使用
  7. 《C程序设计语言》 第三章 控制流
  8. Java面向对象之成员变量的初始值、object类与对象
  9. 微课系列(一):Python列表remove()方法工作原理
  10. Python使用秦九韶算法求解多项式的值