Java分页查询的几种实现方法举例

 更新时间:2023年06月27日 10:46:43   作者:Oliver_Liuqifan  
这篇文章主要给大家介绍了关于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的详细教程

    本文主要对SpringBoot2.x集成Thymeleaf及其常用语法进行简单总结,其中SpringBoot使用的2.4.5版本。对SpringBoot2.x 集成 Thymeleaf知识感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • spring注解@Service注解的使用解析

    spring注解@Service注解的使用解析

    这篇文章主要介绍了spring注解@Service注解的使用解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • eclipse实现DSA数字签名

    eclipse实现DSA数字签名

    这篇文章主要为大家详细介绍了eclipse实现DSA数字签名算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Spring Boot请求处理之常用参数注解使用教程

    Spring Boot请求处理之常用参数注解使用教程

    这篇文章主要给大家介绍了关于Spring Boot请求处理之常用参数注解使用的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • spring boot整合kafka过程解析

    spring boot整合kafka过程解析

    这篇文章主要介绍了spring boot整合kafka过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 解决遇到Cannot resolve ch.qos.logback:logback-classic:1.2.3错误的问题

    解决遇到Cannot resolve ch.qos.logback:logback-classic:

    当使用Maven配置项目依赖时,可能会遇到无法解析特定版本的错误,例如,logback-classic版本1.2.3可能无法在配置的仓库中找到,解决方法包括检查仓库是否包含所需版本,或更新到其他可用版本,可通过Maven官网搜索并找到适用的版本,替换依赖配置中的版本信息
    2024-09-09
  • 详解Java中的Vector

    详解Java中的Vector

    Vector 可实现自动增长的对象数组。本文通过实例代码给大家详细介绍java中的vector,感兴趣的朋友一起看看吧
    2017-10-10
  • Go Java算法之K个重复字符最长子串详解

    Go Java算法之K个重复字符最长子串详解

    这篇文章主要为大家介绍了Go Java算法之K个重复字符最长子串详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Spring容器的创建过程之如何注册BeanPostProcessor详解

    Spring容器的创建过程之如何注册BeanPostProcessor详解

    关于BeanPostProcessor 各位一定不陌生,今天整理的这篇文章总结了如何注册BeanPostProcessor,文中有非常详细的图文示例,需要的朋友可以参考下
    2021-06-06
  • Java使用Graphics2D实现字符串文本自动换行

    Java使用Graphics2D实现字符串文本自动换行

    这篇文章主要为大家详细介绍了Java如何使用Graphics2D实现字符串文本自动换行,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04

最新评论