Springboot 之 使用JPA进行分页操作
来源:互联网 发布:linux操作mysql数据库 编辑:程序博客网 时间:2024/05/22 14:57
本文章来自【知识林】
在上一篇文章《Springboot 之 使用JPA对数据进行排序》中讲述了使用JPA对数据进行排序,本文章将沿用其基础数据及项目代码进行扩展,着重讲述使用JPA对数据进行分页的操作,同时也会进行相应封装及与排序整合。
原生分页
@Testpublic 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()); }}@Testpublic void test2() { Page<User> datas = userService.findAll(PageableTools.basicPage(0)); print(datas);}
注意:print
方法供其他测试方法公用,page
:页码是从0
开始。
- 测试传页码和条数
@Testpublic void test3() { Page<User> datas = userService.findAll(PageableTools.basicPage(1, 5)); print(datas);}
- 测试传页码、条数和排序
@Testpublic 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
本文章来自【知识林】
0 0
- Springboot 之 使用JPA进行分页操作
- Springboot 之 使用JPA对数据进行排序
- 11.Springboot 之 使用JPA对数据进行排序
- SpringBoot 使用JPA操作数据库
- SpringBoot开发详解(十) -- 使用JPA访问数据库下篇及使用Page进行数据分页
- SpringBoot进阶之JPA实现分页、排序
- SpringBoot 07 之JPA使用
- SpringBoot使用PageHelper进行分页
- SpringBoot JPA 条件分页
- SpringBoot中连接MYSQL数据库,并使用JPA进行数据库的相关操作
- SpringBoot中连接MYSQL数据库,并使用JPA进行数据库的相关操作
- Springboot 之 JPA数据库操作进阶篇
- SpringBoot之连接MySQL,JPA操作
- 使用JPA进行数据操作
- Springboot 之 使用JPA做数据筛选
- SpringBoot之使用JPA保存数据
- 三、springboot项目的简单使用之:JPA使用操作数据库
- springboot JPA操作数据库
- 【Linux系统调用】文件编程
- 利用 Selenium WebDriver + Grid2 实现并行的浏览器端性能测试
- 本地多域名配置
- 腾讯老司机的RecyclerView局部刷新爬坑之路
- 输入输出流BufferedReader PrintWriter demo
- Springboot 之 使用JPA进行分页操作
- 谈谈CDMA的短信流程
- [android]在 Html.fromHtml 中的换行被忽略
- Padding,Kernel-size,stride关系公式
- Spring AOP - 基于XML配置文件
- ecshop二次开发--后台秒杀
- shell----自动补齐
- ADB无线连接Android,连接问题
- 设计模式---创建型模式