10. Spring Boot 中的分页查询

在Spring Boot中使用分页查询主要依赖了org.springframework.data.domain.*包下面的及格分页类的功能。使用分页查询常见有两种方式,一种是直接在程序中写死分页的参数(页数,每页大小等),需要依赖@PageableDefault注解。该注解指明了分页参数的默认值。另一种则是,可以通过URL等传入的信息进行分页信息的设置。

在常用的项目中,分页信息肯定是可以传入的,因此,只讨论如何根据传入的分页信息来实现分页查询。

1. Repository层加入分页支持

依然以配置了JPA操作的Spring Boot项目为例,要实现分页,需要在原有的架构上进行一定的改造。

首先就是在DAO层本身要支持分页参数。由于Spring中jpa的简化性,只需要添加如下类似的声明,即表示可以通过DAO层支持分页访问数据库了。

Page findAll(Pageable pageable);

2. 服务层提供对该接口的访问

做一个简单的封装即可,例如:

/**根据传入的分页参数,查询指定分页内的用户列表*/
    public Page getAllSysUserInfoByPageable(Pageable pageable){
        return  sysUserInfoRepository.findAll(pageable);
    }

3. Controller层创建分页对象来访问

底层的分页支持都已经提供好了,只需要在Controller层根据用户传入的参数来创建一个分页请求对象,就可以实现分页查询了。
第一步: 设置分页后的结果排序方案对象。
第二步: 根据排序方案对象和传入的参数实例化一个Pageable对象,用于分页的大小、页面数和排序方案。
第三步: 使用该分页对象

一个简单的示例如下:

/**实现分页查询的方法*/
    @GetMapping("/page/{pageId}/size/{sizeId}")
    public List getAllSysUserInfoListByPage(@PathVariable("pageId") int pageId, @PathVariable("sizeId") int size) {
        Sort sort =  new Sort(Sort.Direction.ASC, "userId");
        Pageable pageable = new PageRequest(pageId, size, sort);
        Page pageContent = sysUserInfoService.getAllSysUserInfoByPageable(pageable);
        return pageContent.getContent();
    }
  • Pageable是一个接口,用于接收分页请求(PageRequet)对象。
  • 分页参数pageId是默认从 0 开始计数的。

你可能感兴趣的:(10. Spring Boot 中的分页查询)