SpringBoot操作MongoDB实现分页查询

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

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

        <dependency>
            <groupId>org.mongodbgroupId>
            <artifactId>mongo-java-driverartifactId>
            <version>3.2.2version>
        dependency>

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

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

Dao接口:

@Repository
public interface CustomerDao  extends PagingAndSortingRepository<Customer,String>{

}

实体类:

//指定对应于集合customer
@Document(collection = "customer")
public class Customer {
//主键
    @Id
    private String _id;
    private String name;
    private String phone;
    private String gender;
    private String birthday;
    private String passport;
//xxxx
}

Controller层:

@Autowired
CustomerDao customerDao;
//完成分页请求
@RequestMapping("/selectName")
    public List selectName(@RequestParam("id") int id){
        //构建分页信息
        PageRequest pageRequest = buildPageRequest(id,5,null);
        //查询指定分页的内容
        Iterator customers =  customerDao.findAll(pageRequest).iterator();
        List lists = new ArrayList();
        while(customers.hasNext()){
            lists.add(customers.next());
        }
        return lists;
    }
    /**
     *      * 创建分页请求.      
     */
    private PageRequest buildPageRequest(int pageNumber, int pageSize,String sortType) {
        Sort sort = null;
        if ("auto".equals(sortType)) {
            sort = new Sort(Direction.DESC, "id");
        } else if ("birthday".equals(sortType)) {
            sort = new Sort(Direction.ASC, "birthday");
        }
        //参数1表示当前第几页,参数2表示每页的大小,参数3表示排序
        return new PageRequest(pageNumber-1,pageSize,sort);
    }

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

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

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

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

Controller:

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

你可能感兴趣的:(Java,EE流行框架,NoSQL,MongoDB,Java,EE流行框架)