SpringBoot操作MongoDB实现分页查询

不念不忘少年蓝@ 2022-08-23 00:40 802阅读 0赞

前几天写了一篇关于介绍SpringBoot的简单使用。以及使用SpringBoot JPA做了一次数据库的一个CURD (地址:http://blog.csdn.net/canot/article/details/51449589)这篇文件简单学习Spring Boot JPA 或者说是Spring Data对现在很流行的一个nosql产品MongoDB的简单操作(主要针对在分页查询上)。

于前面SpringBoot的HelloWorld类似,在导入必要的核心包之后,为了正常驱动MongoDB还需要额外的包(MongoDB驱动包):

  1. <dependency>
  2. <groupId>org.mongodb</groupId>
  3. <artifactId>mongo-java-driver</artifactId>
  4. <version>3.2.2</version>
  5. </dependency>

在之前的Spring Boot的演示中,为了使得项目能够正确的驱动数据库。必须在项目的根目录下增加了一个配置文件:application.properties.该配置文件写入了数据库的信息,如操作哪个数据库,帐号密码等等。在操作MongoDB中这个文件不是必须的了。当你的数据库没有设置帐号密码时,当你要操作的集合位于数据库test中时,这个配置文件可以省掉。当如果不是上述的情况那么一定需要该配置文件:

  1. spring.data.mongodb.database: ticket
  2. spring.data.mongodb.uri: mongodb://localhost:27017
  3. //xxxx

Dao接口:

  1. @Repository
  2. public interface CustomerDao extends PagingAndSortingRepository<Customer,String>{
  3. }

实体类:

  1. //指定对应于集合customer
  2. @Document(collection = "customer")
  3. public class Customer {
  4. //主键
  5. @Id
  6. private String _id;
  7. private String name;
  8. private String phone;
  9. private String gender;
  10. private String birthday;
  11. private String passport;
  12. //xxxx
  13. }

Controller层:

  1. @Autowired
  2. CustomerDao customerDao;
  3. //完成分页请求
  4. @RequestMapping("/selectName")
  5. public List<Customer> selectName(@RequestParam("id") int id){
  6. //构建分页信息
  7. PageRequest pageRequest = buildPageRequest(id,5,null);
  8. //查询指定分页的内容
  9. Iterator<Customer> customers = customerDao.findAll(pageRequest).iterator();
  10. List<Customer> lists = new ArrayList<Customer>();
  11. while(customers.hasNext()){
  12. lists.add(customers.next());
  13. }
  14. return lists;
  15. }
  16. /**
  17. * * 创建分页请求.
  18. */
  19. private PageRequest buildPageRequest(int pageNumber, int pageSize,String sortType) {
  20. Sort sort = null;
  21. if ("auto".equals(sortType)) {
  22. sort = new Sort(Direction.DESC, "id");
  23. } else if ("birthday".equals(sortType)) {
  24. sort = new Sort(Direction.ASC, "birthday");
  25. }
  26. //参数1表示当前第几页,参数2表示每页的大小,参数3表示排序
  27. return new PageRequest(pageNumber-1,pageSize,sort);
  28. }

Spring Boot 或者Spring data提供给我们的接口形式来帮我们来完成对于表的CRUR操作。那么我们了来思考怎么实现对于某个字段的查询,在以前我们自己手写的DAO中我们通过编写一个findByxxx来实现,在Spring Boot或者说Spring Data中它也为我们提供了这种方法,并且我们也只需要写在接口中,而不需要实现类,它就能帮我们实现。

查询所有性别为男,并按生日排序

  1. @Repository
  2. public interface CustomerDao extends PagingAndSortingRepository<Customer,String>{
  3. //这个方法名不能乱写,findByXXX,那么对于的类中必须有XXX字段。也就是说对应的数据库中一定要存在XXX字段对应的列
  4. public Page<Customer> findBygender(String gender,Pageable pageable);
  5. }

这里注意一点,虽然我们在调用Repository方法中的分页查询时,传入的参数是PageRequest。但一定要在Repository定义该方法时参数定义为Pageable。否则会报错:Paging query needs to have a Pageable parameter

Controller:

  1. @RequestMapping("/selectBygender")
  2. public Page<Customer> getBygender(String gender,@RequestParam("pageNumber") int pageNumber){
  3. //构建分页信息
  4. PageRequest pageRequest = buildPageRequest(pageNumber,5,"birthday");
  5. Page<Customer> customera = customerDao.findBygender(gender,pageRequest);
  6. return customers;
  7. }

发表评论

表情:
评论列表 (有 0 条评论,802人围观)

还没有评论,来说两句吧...

相关阅读