Java分页查询的几种实现方法举例
前言
最近在做需求的过程中遇到几个需要分页查询的需求,我也对分页有了较深的了解。分页一般分为两种一种是直接在sql中分页,一种是在内存中分页。本文仅针对内存中分页做记录。
第一种
如果是一个查询接口,向接口中传入page,和size(page默认值1,size默认值10)即可,返回参数是github的PageInfo,里面在放实际返回类型。
进入实现层,使用PageHelper,并调用pageQuery方法即可完成分页,以下为Pagehelper的具体代码 。(但需注意,此方法只适用于从数据库中直接查出的数据,如果将查出的数据进行二次封装则会导致分页失败)
import com.github.pagehelper.Page; import lombok.experimental.UtilityClass; import org.springframework.beans.BeanUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import java.util.List; import java.util.Objects; import java.util.function.Supplier; /** * @author LIUQIFAN */ @UtilityClass public class PageHelper { /** * 要求 请求参数: ?pageNum=xxx&pageSize=xxx * * @param supplier 查询方法 * @param <T> 类型对象 * @return 结果集 */ public static <T> PageInfo<T> pageQuery(Supplier<List<T>> supplier) { ServletRequestAttributes attributes = (ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes(), "无法获取request"); Page<Object> page = com.github.pagehelper.PageHelper.startPage(attributes.getRequest()); //======================== List<T> list = supplier.get(); PageInfo<T> pageInfo = new PageInfo<>(); BeanUtils.copyProperties(page.toPageInfo(), pageInfo); pageInfo.setList(list); return pageInfo; } /** * @param pageNum 页号 * @param pageSize 每页数据大小 * @param <T> 类型 * @return 结果集 */ public static <T> PageInfo<T> pageQuery(int pageNum, int pageSize, Supplier<List<T>> supplier) { Page<Object> page = com.github.pagehelper.PageHelper.startPage(pageNum, pageSize, true); List<T> list = supplier.get(); PageInfo<T> pageInfo = new PageInfo<>(); BeanUtils.copyProperties(page.toPageInfo(), pageInfo); pageInfo.setList(list); return pageInfo; } /** * @param supplier 查询方法 * @param <T> 类型对象 * @return 结果集 */ public static <T> List<T> pQuery(Supplier<List<T>> supplier) { ServletRequestAttributes attributes = (ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes(), "无法获取request"); com.github.pagehelper.PageHelper.startPage(attributes.getRequest()); //======================== return supplier.get(); } /** * @param pageNum 页号 * @param pageSize 每页数据大小 * @param <T> 类型 * @return 结果集 */ public static <T> List<T> pQuery(int pageNum, int pageSize, Supplier<List<T>> supplier) { com.github.pagehelper.PageHelper.startPage(pageNum, pageSize, true); return supplier.get(); } }
第二种
这种方法是我第一次使用,把入参的page和size封装成了对象PageDomain
PageDomain代码如下
@Data public class PageDomain1 { /** * 当前页 */ private Integer page = 1; /** * 每页数量 */ private Integer limit = 10; /** * 获取开始的数据行 */ public Integer start() { return (this.page - 1) * this.limit; } /** * 获取结束的数据行 */ public Integer end() { return this.page * this.limit; } }
这是控制层代码
这是实现层代码,这里的resultList,是我们先从数据库中查出来的结果集,再用PageUtils的Startpage方法进行分页操作,最后组装PageInfo返回体
下面是PageUtils的代码
总结
到此这篇关于Java分页查询的几种实现方法的文章就介绍到这了,更多相关Java分页查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot2.x 集成 Thymeleaf的详细教程
本文主要对SpringBoot2.x集成Thymeleaf及其常用语法进行简单总结,其中SpringBoot使用的2.4.5版本。对SpringBoot2.x 集成 Thymeleaf知识感兴趣的朋友跟随小编一起看看吧2021-07-07解决遇到Cannot resolve ch.qos.logback:logback-classic:
当使用Maven配置项目依赖时,可能会遇到无法解析特定版本的错误,例如,logback-classic版本1.2.3可能无法在配置的仓库中找到,解决方法包括检查仓库是否包含所需版本,或更新到其他可用版本,可通过Maven官网搜索并找到适用的版本,替换依赖配置中的版本信息2024-09-09Spring容器的创建过程之如何注册BeanPostProcessor详解
关于BeanPostProcessor 各位一定不陌生,今天整理的这篇文章总结了如何注册BeanPostProcessor,文中有非常详细的图文示例,需要的朋友可以参考下2021-06-06
最新评论