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

这篇具有很好参考价值的文章主要介绍了Java分页查询的几种实现方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在做需求的过程中遇到几个需要分页查询的需求,我也对分页有了较深的了解。分页一般分为两种一种是直接在sql中分页,一种是在内存中分页。本文仅针对内存中分页做记录。

第一种

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

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

 文章来源地址https://www.toymoban.com/news/detail-461785.html

 如果是一个查询接口,向接口中传入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;
    }
}

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

 这是控制层代码

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

 这是实现层代码,这里的resultList,是我们先从数据库中查出来的结果集,再用PageUtils的Startpage方法进行分页操作,最后组装PageInfo返回体

下面是PageUtils的代码

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

 

到了这里,关于Java分页查询的几种实现方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分享SQL重复记录查询的几种方法

      SQL重复记录查询的几种方法,需要的朋友可以参考一下 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 代码如下: select * from people where peopleId in (select   peopleId from   people group by   peopleId having count (peopleId) 1) 2、删除表中多余的重复记录,重复记录

    2024年02月12日
    浏览(36)
  • Oracle模糊查询的几种方法【推荐最后一种】

    归纳总结 😁 --废话不多说,直接进入主题: oracle 中的 || 起链接作用,使用“||”字符,连接成 -- %param% 示例: 结果: flowermoringrain 嵌套查询: 示例: 结果:\\\'ABC\\\' MySQL中的模糊查询 like 和 Oracle中的 instr() 函数 有同样的查询效果; 示例: 想了解上述基本原理的 🙋 ,就可以

    2024年02月11日
    浏览(27)
  • Java提升数据库大数据查询速度的几种方式

    本文章以MySQL数据库为用例说明,列举出几个常用的提升查询速度的方式。 分页查询,在网络浏览中,经常会看到分页的使用,像百度搜索分页、文档资料分页等,这些都是一种常见的提升数据查询速度和用户体验的一种方式,数据库有limit,开发人员可使用此

    2024年02月12日
    浏览(42)
  • mybatisplus的几种分页方式

    官方文档中给出了几种分页方式,挨个举例说明一下 这三种 Mybatis Plus 分页方式的区别主要在于传递参数的方式和返回结果的类型。 IPage selectPageVo(IPage? page, Integer state) 这种方式需要传入一个 IPage 对象作为分页参数,其泛型类型可以是任何实体类。方法返回值也是一个 IPage 对

    2024年02月07日
    浏览(36)
  • 【Java】打印矩阵的几种方法

    首先创建一个矩阵 int[][] grid = {{1,2,4},{3,3,1},{3,4,5}}; 如果直接输出grid,则会打印矩阵地址,所以,我们需要进行矩阵遍历,得到矩阵的值。 直接打印grid: 首先,用row记录矩阵的行数,用column记录矩阵的列数,并通过行数和列数进行矩阵遍历 得到结果: 结果: 结果:

    2024年02月11日
    浏览(31)
  • Java获取Java文件路径的几种方法

    Java获取Java文件路径的几种方法 在Java开发中,获取Java文件的路径是一项常见的任务。无论是读取文件、写入文件还是对文件进行其他操作,都需要先获得文件的路径。本文将介绍几种获取Java文件路径的方法,并提供相应的代码示例和详细描述。 方法一:使用相对路径 相对

    2024年02月07日
    浏览(41)
  • java比较日期大小的几种方法

    1. Date.compareTo() java.util.Date提供了在Java中比较两个日期的经典方法compareTo()。 如果两个日期相等,则返回值为0。 如果Date在date参数之后,则返回值大于0。 如果Date在date参数之前,则返回值小于0。 @Test void testDateCompare() throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat(\\\"yyyy

    2024年02月03日
    浏览(41)
  • JAVA 截取字符串的几种方法

    主要有以下几种方法: 1、通过subString()方法来进行字符串截取(最常用) 2、通过StringUtils提供的方法 3、split()+正则表达式来进行截取 1、通过subString()方法来进行字符串截取,返回字符串中的子字符串,在java中有两种用法 第一种,传递一个参数: 第二种,传递两个参数:

    2024年02月10日
    浏览(32)
  • java高并发处理 java处理高并发的几种方法

             并发就是可以使用多个线程或进程,同时处理(就是并发)不同的操作。         高并发的时候就是有很多用户在访问,导致系统数据不正确、糗事数据的现象。对于一些大型网站,比如门户网站,在面对大量用户访问、高并发请求方面,基本的解决方案集中

    2024年02月07日
    浏览(36)
  • Java 中 Map 初始化的几种方法

    方式1:传统方式 方式2:java8新特性-双括号初始化 匿名内部类通常会导致内存泄漏问题,因为它会隐式地持有外部类的引用,如果外部类的引用一直存在而没有释放,它所持有的内存也就不会被垃圾回收机制回收,产生内存泄漏。而通过使用静态内部类或者弱引用等技术可以

    2024年02月05日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包