Springboot 之 使用JPA进行分页操作
2016-10-21 16:15
926 查看
本文章来自【知识林】
在上一篇文章《Springboot 之 使用JPA对数据进行排序》中讲述了使用JPA对数据进行排序,本文章将沿用其基础数据及项目代码进行扩展,着重讲述使用JPA对数据进行分页的操作,同时也会进行相应封装及与排序整合。
注意:继承了
在创建
排序封装类
分页封装类
测试只传页码参数
注意:
测试传页码和条数
测试传页码、条数和排序
其他几个重载方法可自行测试。笔者认为通过
示例代码:https://github.com/zsl131/spring-boot-test/tree/master/study09
本文章来自【知识林】
在上一篇文章《Springboot 之 使用JPA对数据进行排序》中讲述了使用JPA对数据进行排序,本文章将沿用其基础数据及项目代码进行扩展,着重讲述使用JPA对数据进行分页的操作,同时也会进行相应封装及与排序整合。
原生分页
@Test public void test1() { Pageable pageable =new PageRequest(0, 5); Page<User> datas = userService.findAll(pageable); System.out.println("总条数:"+datas.getTotalElements()); System.out.println("总页数:"+datas.getTotalPages()); for(User u : datas) { System.out.println(u.getId()+"===="+u.getUserName()); } }
注意:继承了
JpaRepository后的
IUserService拥有了
findAll的重载方法,当传入参数为
Pageable时,返回传则是一个分页的对象
Page。
在创建
Pageable接口的实例时需要指定其子类
PageRequest,在
PageRequest类中有几个构造函数:
public PageRequest(int page, int size) { this(page, size, (Sort)null); } public PageRequest(int page, int size, Direction direction, String... properties) { this(page, size, new Sort(direction, properties)); } public PageRequest(int page, int size, Sort sort) { super(page, size); this.sort = sort; }
page:当前页码
size:每页获取的条数
direction:排序方式,ASC、DESC
properties:排序的字段
sort:排序对象
封装分页且整合排序
排序Dto对象public class SortDto { //排序方式 private String orderType; //排序字段 private String orderField; public String getOrderField() { return orderField; } public void setOrderField(String orderField) { this.orderField = orderField; } public String getOrderType() { return orderType; } public void setOrderType(String orderType) { this.orderType = orderType; } public SortDto(String orderType, String orderField) { this.orderType = orderType; this.orderField = orderField; } //默认为DESC排序 public SortDto(String orderField) { this.orderField = orderField; this.orderType = "desc"; } }
排序封装类
public class SortTools { public static Sort basicSort() { return basicSort("desc", "id"); } public static Sort basicSort(String orderType, String orderField) { Sort sort = new Sort(Sort.Direction.fromString(orderType), orderField); return sort; } public static Sort basicSort(SortDto... dtos) { Sort result = null; for(int i=0; i<dtos.length; i++) { SortDto dto = dtos[i]; if(result == null) { result = new Sort(Sort.Direction.fromString(dto.getOrderType()), dto.getOrderField()); } else { result = result.and(new Sort(Sort.Direction.fromString(dto.getOrderType()), dto.getOrderField())); } } return result; } }
分页封装类
/** * Created by 钟述林 393156105@qq.com on 2016/10/21 15:45. */ public class PageableTools { /** * 获取基础分页对象 * @param page 获取第几页 * @param size 每页条数 * @param dtos 排序对象数组 * @return */ public static Pageable basicPage(Integer page, Integer size, SortDto... dtos) { Sort sort = SortTools.basicSort(dtos); page = (page==null || page<0)?0:page; size = (size==null || size<=0)?15:size; Pageable pageable = new PageRequest(page, size, sort); return pageable; } /** * 获取基础分页对象,每页条数默认15条 * - 默认以id降序排序 * @param page 获取第几页 * @return */ public static Pageable basicPage(Integer page) { return basicPage(page, 0, new SortDto("desc", "id")); } /** * 获取基础分页对象,每页条数默认15条 * @param page 获取第几页 * @param dtos 排序对象数组 * @return */ public static Pageable basicPage(Integer page, SortDto... dtos) { return basicPage(page, 0, dtos); } /** * 获取基础分页对象,排序方式默认降序 * @param page 获取第几页 * @param size 每页条数 * @param orderField 排序字段 * @return */ public static Pageable basicPage(Integer page, Integer size, String orderField) { return basicPage(page, size, new SortDto("desc", orderField)); } /** * 获取基础分页对象 * - 每页条数默认15条 * - 排序方式默认降序 * @param page 获取第几页 * @param orderField 排序字段 * @return */ public static Pageable basicPage(Integer page, String orderField) { return basicPage(page, 0, new SortDto("desc", orderField)); } }
测试只传页码参数
private void print(Page<User> datas) { System.out.println("总条数:"+datas.getTotalElements()); System.out.println("总页数:"+datas.getTotalPages()); for(User u : datas) { System.out.println(u.getId()+"===="+u.getUserName()); } } @Test public void test2() { Page<User> datas = userService.findAll(PageableTools.basicPage(0)); print(datas); }
注意:
page:页码是从
0开始。
测试传页码和条数
@Test public void test3() { Page<User> datas = userService.findAll(PageableTools.basicPage(1, 5)); print(datas); }
测试传页码、条数和排序
@Test public void test4() { Page<User> datas = userService.findAll(PageableTools.basicPage(1, 5, new SortDto("id"))); print(datas); Page<User> datas2 = userService.findAll(PageableTools.basicPage(1, 5, new SortDto("ASC", "id"))); print(datas2); }
其他几个重载方法可自行测试。笔者认为通过
SortTools和
PageableTools这两个封装类已能满足绝大部份的需求,如果您觉得还有更好的方式请与我联系并加以指正为谢!
示例代码:https://github.com/zsl131/spring-boot-test/tree/master/study09
本文章来自【知识林】
相关文章推荐
- SpringBoot中连接MYSQL数据库,并使用JPA进行数据库的相关操作
- SpringBoot中连接MYSQL数据库,并使用JPA进行数据库的相关操作
- SpringBoot开发详解(十) -- 使用JPA访问数据库下篇及使用Page进行数据分页
- SpringBoot JPA实现增删改查、分页、排序、事务操作等功能
- 基于Springboot使用MongoDB进行简单Gis操作
- SpringBoot入门(三)--数据库操作&&Spring-data-jpa的使用
- springboot使用JPA时间类型进行模糊查询的方法
- 在spring Boot中使用Spring-data-jpa操作数据库
- • Spring Boot 进 阶- 数 据 访 问-使用spring-data-jpa 操作数据库
- Spring-boot中使用Spring-data-jpa操作DB
- Springboot 之 使用JPA进行分页操作
- Springboot 之 使用JPA对数据进行排序
- 在spring Boot中使用Spring-data-jpa操作数据库
- 三、springboot项目的简单使用之:JPA使用操作数据库
- Spring Boot之使用JPA操作mysql
- 使用spring-data-jpa的JpaRepository来进行类的db操作(配置)
- SpringBoot使用PageHelper进行分页
- SpringBoot中使用MyBatis,使用PageHelper进行分页查询以及碰到的错误
- springboot中通用mapper结合mybatis generator的使用 通用mapper是为了方便开发人员对单表进行crud操作而产生的一套通用方法。 通用mapper只支持单表操作,可以
- SpringBoot入门-6(利用jpa连接hibernate,并进行生成表,对表的增加,删除,查询操作)