Spring Boot JPA分页查询的具体实现(附带实例)
JPA 提供了强大的数据查询功能,让我们用少量的代码就能实现大部分数据查询功能。同时,JPA 还提供了分页查询。
JPA 已经帮我们内置了分页功能,在查询的方法中传入参数 Pageable,当查询中有多个参数的时候,Pageable 建议作为最后一个参数传入,示例代码如下:
调用方式也特别简单,先实例化 Pageable 分页参数,然后传入具体的调用方法即可,示例代码如下:
通过示例代码可以看到,Page 封装了总页数、总记录数、当页数据等属性,完全满足分页功能的需求。具体属性如下:
JPA 已经帮我们内置了分页功能,在查询的方法中传入参数 Pageable,当查询中有多个参数的时候,Pageable 建议作为最后一个参数传入,示例代码如下:
// 返回Page对象 Page<User> findByNameLike(String name, Pageable pageable);在上面的示例中,使用 Pageable 对象实现分页查询功能,Pageable 和 Page 是 Spring 封装的分页实现类,使用的时候需要传入页数、每页条数和排序规则。
调用方式也特别简单,先实例化 Pageable 分页参数,然后传入具体的调用方法即可,示例代码如下:
@Test public void testPageQuery() { int pageIndex=0,pageSize=2; Sort sort = Sort.by(Sort.Direction.DESC, "id"); Pageable pageable = PageRequest.of(pageIndex, pageSize, sort); Page<User> pageInfo = userRepository.findByNameLike("we%",pageable); System.out.println("当前页:"+pageInfo.getNumber() +",总记录数:"+pageInfo.getTotalElements() +",总页数:"+pageInfo.getTotalPages() +",是否有上一页:"+pageInfo.hasPrevious() +",是否有下一页:"+pageInfo.hasNext()); for (User u : pageInfo.getContent()){ System.out.println("name:"+u.getName()+",age:"+u.getAge()); } }在上面的示例中,使用 Sort 类定义排序对象,然后使用 PageRequest 生成分页参数,最后传入 Pageable 参数即可。
- Sort:控制分页数据的排序,可以选择升序和降序。
- PageRequest:控制分页的辅助类,可以设置页码、每页的数据条数、排序等。
通过示例代码可以看到,Page 封装了总页数、总记录数、当页数据等属性,完全满足分页功能的需求。具体属性如下:
- getContent:当前页数据;
- getNumber:获取当前页码;
- getTotalElements:获取总记录数;
- getTotalPages:获取总页数;
- hasPrevious:是否上一页;
- hasNext():是否下一页。