• java后端pageHelper分页实现方法



    背景

    当一次查库数据量较大,不光给数据库带来压力,同时前端渲染页面压力也很大,所以尝试做真分页来减小压力。


    方法一:mysql的limit进行分页

    SELECT * FROM `t_item_type` limit page,pageSize
    
    
    • 1
    • 2

    在这里插入图片描述
    可以看见这是从第一页开始查,查5条数据。

    方法二:使用插件Mybatis-PageHelper(拦截器原理)

    1、本质

    将原来需要人手动写的 sql中 limit page,pageSize变成直接传入参数。

    2.实现步骤

    引入依赖

    spring

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.1.2</version>
    </dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    springBoot

     
    <dependency>
           <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
             <version>1.2.10</version>      
    </dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    修改application.yml

    pagehelper:
      helperDialect: mysql
      reasonable: true
      supportMethodsArguments: true
      params: count=countSql
    
    • 1
    • 2
    • 3
    • 4
    • 5

    参数说明:
    在这里插入图片描述

    修改代码

    PageHelper.startPage(1,5);这句话放置的位置是一整条sql查询结果上边,因为插件的原理是在sql上拼接 limit 传进去两个参数 ,比如当前service中逻辑还包含两条sql,此分页将不起作用。

      //这一句一定要放在查出所有数据的上边,第一个数表示pageNum,第二个数表示pageSize
      PageHelper.startPage(1,5);
      //这里表示要获取所有的信息
      List<ItemAllInfo>itemAllInfos  =  itemTypeService.selectAllItemByType(itemType);
      //转换成分页的形式,这里做改动后返回值于原来相比格式发生变化,要及时调整前端接收数据的格式。
      PageInfo pageInfo = new PageInfo(itemAllInfos);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    总结

    工欲善其事,必先利其器。这里做完改动以后还是要多多注意前端格式转换。

    PageHelper是一个用于在Java应用程序中进行分页查询的开源库。它可以与MyBatis等持久层框架集成,帮助开发人员轻松地处理数据库查询结果的分页展示。

    PageHelper的特点包括:

    简单易用: PageHelper提供了简单的方法来实现分页查询,不需要开发人员手动编写复杂的SQL语句。

    无侵入性: 使用PageHelper不需要修改现有的SQL语句或代码逻辑,只需要在查询方法中添加相应的分页配置。

    与主流持久层框架集成: PageHelper可以与主流的Java持久层框架(如MyBatis)无缝集成,只需要在项目中引入相关依赖即可。

    多种数据库支持: PageHelper支持多种常见的数据库,包括MySQL、Oracle、SQL Server等。

    灵活的配置: PageHelper提供了丰富的配置选项,可以根据需求进行定制,例如可以配置默认的分页大小、是否进行合理化的分页等。

    支持物理分页和逻辑分页: PageHelper支持物理分页(通过limit和offset)和逻辑分页(通过查询所有数据后在内存中进行分页)。

    提供排序功能: PageHelper还提供了排序功能,可以根据指定的字段和顺序进行数据排序。

    基于拦截器: PageHelper使用拦截器技术,在执行SQL查询时自动添加分页相关的SQL语句。

    总的来说,PageHelper可以帮助开发人员在不增加太多复杂性的情况下实现分页查询功能,提升开发效率并优化数据库查询性能。

    在使用PageHelper进行分页查询时,还有一些要补充的重要点:

    引入依赖: 在项目的构建文件中(例如Maven的pom.xml)添加PageHelper的依赖,以便在项目中使用。

    配置拦截器: 在项目的配置文件中(例如MyBatis的配置文件)配置PageHelper的拦截器。这将确保在执行查询时自动应用分页功能。

    方法调用: 在进行分页查询的方法中,使用PageHelper的静态方法来设置分页参数,例如设置页码和每页记录数等。

    分页参数对象: PageHelper还提供了一个Page类,你可以通过这个类来获取分页的相关信息,如总记录数、总页数等。

    注意事项: 分页查询通常会涉及到数据库查询,需要注意查询的性能问题。在查询大量数据时,合理使用索引、优化查询语句,避免不必要的性能问题。

    合理设置分页大小: 分页大小的选择需要根据实际情况来决定。如果设置过小,可能会导致分页查询过于频繁;如果设置过大,可能会增加内存和查询时间。

    逻辑分页的使用场景: 虽然逻辑分页在某些场景下可以减轻数据库压力,但在处理大量数据时可能会导致内存占用较高,需要权衡选择。

    多表关联查询: 在进行多表关联查询时,PageHelper也可以有效地进行分页处理,但需要注意SQL语句的编写和性能。

    总之,使用PageHelper可以方便地实现分页查询,提升开发效率。然而,在使用过程中需要结合具体情况进行配置和优化,以确保分页查询既满足业务需求又不影响系统性能。

  • 相关阅读:
    vuex里的state,actions,mutations用法与理解
    众筹DAO“枯萎”的缩影:曾拍下《沙丘》未出版手稿的Spice DAO解散
    使用shapely判断坐标点位于哪个路区
    mysql不同隔离级别下锁的实际运用
    多台的UPS该如何实现系统化的集中监控呢?
    Linux进程控制--程序替换
    同城服务系统商家商城城市代理躲猫猫小程序
    KEGG通路图绘制 | ggpathway包
    在Ubuntu 系统下开发GUI,用哪种开发工具比较好?
    wow-singleton文件说明
  • 原文地址:https://blog.csdn.net/weixin_45706856/article/details/127813273