使用PageHelper插件实现分页功能

本文介绍如何使用PageHelper插件简化MyBatis分页操作。通过添加依赖、配置属性及编写简洁代码,实现无需SQL的高效分页功能。PageHelper提供丰富的属性如页数、页大小等,便于获取分页后的数据。

传统的分页一般是使用sql语句 limit 关键词实现的。
PageHelper插件提供了无需写sql语句的实现方式,更简单功能也很全面。

1.添加依赖

<!-- 分页插件 -->
  <!-- pagehelper -->
  <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>1.2.5</version>
  </dependency>

2.编写配置

pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true

3.编写分页代码

分页和查找全部的代码几乎一样,只需要在查找前插入
PageHelper.startPage(startPage,pageSize);
startPage:开始的页数,pageSize:每页的数量。

public PageInfo<UserModel> getPageInfo(int startPage,int pageSize){
  PageHelper.startPage(startPage,pageSize);
  List<UserModel> userList=userdao.findAll();
  return new PageInfo<UserModel>(userList); 
}

PageInfo是PageHelper自带的工具栏,其中包含很多有用的属性。比如
pageNum:当前为第几页
pageSize:每页的数据行数
startRow:当前页数据从第几条开始
endRow:当前页数据从第几条结束
pages:总页数
prePage:上一页页数
nextPage:下一页页数
hasPreviousPage:是否有上一页
hasNextPage:是否有下一页
navigatepageNums:所有页码的数组

要得到分页后的数据只需使用 pageInfo.getList()得到。

### MyBatis PageHelper 插件分页功能实现方法 #### 配置插件 为了在项目中使用 `PageHelper` 插件,首先需要在 `mybatis-config.xml` 文件中配置该插件。具体做法是在 `<plugins>` 节点下添加一个拦截器节点 `<plugin>` 并指定其类名为 `com.github.pagehelper.PageInterceptor`[^3]。 以下是配置示例: ```xml <configuration> ... <plugins> <!-- 添加 PageHelper 插件 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="helperDialect" value="mysql"/> <property name="offsetAsPageNum" value="false"/> <property name="rowBoundsWithCount" value="true"/> <property name="pageSizeZero" value="true"/> </plugin> </plugins> </configuration> ``` #### 启动分页 在执行查询之前,可以通过调用 `PageHelper.startPage()` 方法来启动分页功能。此方法接受两个参数:`pageNum` 和 `pageSize`,分别表示当前页码和每页显示的记录数[^1]。 以下是一个典型的分页初始化代码片段: ```java // 设置分页参数 PageHelper.startPage(pageNum, pageSize); ``` 如果需要更高级的功能(如排序),可以传递额外的参数给 `startPage` 方法[^4]。例如: ```java // 带有排序字段的分页设置 PageHelper.startPage(pageNum, pageSize, "id desc"); ``` #### 执行查询 完成分页设置后,可以直接调用 Mapper 接口中的查询方法获取数据列表。此时返回的结果会自动按照设定的分页条件进行过滤[^5]。 下面是一段完整的查询逻辑代码示例: ```java @RequestMapping(value = "/allSals/{salsType}/{pageNum}", method = RequestMethod.GET) @ResponseBody public PageInfo<SalsAddressInfo> allSals( HttpServletRequest request, @PathVariable("salsType") String salsType, @PathVariable("pageNum") int pageNum, HttpServletResponse response) throws IOException { // 构建查询参数 Map<String, Object> params = new HashMap<>(); params.put("salsType", salsType); // 开启分页 PageHelper.startPage(pageNum, 30); // 查询数据 List<SalsAddressInfo> infos = salsAddressInfoMapper.allsalas(params); // 将结果封装到 PageInfo 对象中 PageInfo<SalsAddressInfo> pageInfo = new PageInfo<>(infos); return pageInfo; } ``` 在此过程中,`PageHelper` 自动计算总记录数以及分页后的子集,并将其存储在线程局部变量中以便后续访问[^4]。 --- #### 注意事项 - **线程安全**:由于 `PageHelper` 的分页状态保存在线程本地变量中,因此它是线程安全的。 - **性能优化**:对于大数据量场景,合理调整 `pageSize` 参数可有效减少内存占用。 - **兼容性**:确保所使用的数据库方言已正确配置于 `helperDialect` 属性中[^3]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值