在Spring Boot中使用分页查询主要依赖了org.springframework.data.domain.*
包下面的及格分页类的功能。使用分页查询常见有两种方式,一种是直接在程序中写死分页的参数(页数,每页大小等),需要依赖@PageableDefault
注解。该注解指明了分页参数的默认值。另一种则是,可以通过URL等传入的信息进行分页信息的设置。
在常用的项目中,分页信息肯定是可以传入的,因此,只讨论如何根据传入的分页信息来实现分页查询。
1. Repository层加入分页支持
依然以配置了JPA操作的Spring Boot项目为例,要实现分页,需要在原有的架构上进行一定的改造。
首先就是在DAO层本身要支持分页参数。由于Spring中jpa的简化性,只需要添加如下类似的声明,即表示可以通过DAO层支持分页访问数据库了。
Page<SysUserInfo> findAll(Pageable pageable);
2. 服务层提供对该接口的访问
做一个简单的封装即可,例如:
/**根据传入的分页参数,查询指定分页内的用户列表*/
public Page<SysUserInfo> getAllSysUserInfoByPageable(Pageable pageable){
return sysUserInfoRepository.findAll(pageable);
}
3. Controller层创建分页对象来访问
底层的分页支持都已经提供好了,只需要在Controller层根据用户传入的参数来创建一个分页请求对象,就可以实现分页查询了。
第一步: 设置分页后的结果排序方案对象。
第二步: 根据排序方案对象和传入的参数实例化一个Pageable对象,用于分页的大小、页面数和排序方案。
第三步: 使用该分页对象
一个简单的示例如下:
/**实现分页查询的方法*/
@GetMapping("/page/{pageId}/size/{sizeId}")
public List<SysUserInfo> 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<SysUserInfo> pageContent = sysUserInfoService.getAllSysUserInfoByPageable(pageable);
return pageContent.getContent();
}
- Pageable是一个接口,用于接收分页请求(PageRequet)对象。
- 分页参数pageId是默认从 0 开始计数的。