java后端pageHelper分页实现方法


背景

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


方法一:mysql的limit进行分页

SELECT * FROM `t_item_type` limit page,pageSize

在这里插入图片描述
可以看见这是从第一页开始查,查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>

springBoot

 
<dependency>
       <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
         <version>1.2.10</version>      
</dependency>

修改application.yml

pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

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

修改代码

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);

总结

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

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

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Java后端可以使用以下方法实现分页: 1. 使用SQL语句的LIMIT和OFFSET关键字来实现分页。通过在SQL语句中添加LIMIT和OFFSET参数,可以控制查询的结果数量和起始位置,从而实现分页。 例如:SELECT * FROM table_name LIMIT 10 OFFSET 20; 这个SQL语句将从table_name表中查询20行以后的10行数据,即第21行到第30行的数据。 2. 使用分页插件。Java后端开发中,常用的分页插件有MyBatisPageHelper和Hibernate的Hibernate Pagination。这些插件可以自动拦截SQL语句并添加分页参数,使得分页操作更加方便和简单。 例如:使用MyBatisPageHelper插件,只需要在查询语句前调用PageHelper.startPage方法设置分页参数,然后执行查询语句即可。 PageHelper.startPage(1, 10); List<User> userList = userDao.getUserList(); 这个代码片段将查询第1页的10条数据。 3. 手动实现分页逻辑。如果不想使用分页插件,也可以手动实现分页逻辑。首先查询出符合条件的所有数据,然后根据分页参数对数据进行截取,得到当前页的数据。 例如: List<User> userList = userDao.getUserList(); int page = 1; // 当前页码 int pageSize = 10; // 每页数据量 int start = (page - 1) * pageSize; // 当前页数据起始位置 int end = start + pageSize; // 当前页数据结束位置 if (start > userList.size()) { // 越界处理 return new ArrayList<User>(); } else if (end > userList.size()) { // 最后一页处理 end = userList.size(); } return userList.subList(start, end); 这个代码片段将查询第1页的10条数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Circ.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值