pagehelper使用教程

时间:2025-03-10 09:30:54

前言

最近在用oracle 数据库,碰到一个很棘手的问题,那就是分页问题,如果每个SQL都去单独去实现分页,未免太过于麻烦,影响开发效率,在网上也是找了很久,竟然发现了一个分页神器:pagehelper,需要说明的是,这个框架必须结合mybatis一起使用,这也是这个框架的局限性所在。

支持的数据库

基本上常用的关系型数据库都是完美支持的

项目中集成

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>最新版本</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

其他的项目结构请自行baidu

配置拦截器插件(两种方式均可)

1、在 MyBatis 配置 xml 中配置拦截器插件

<!-- 
    plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
    properties?, settings?, 
    typeAliases?, typeHandlers?, 
    objectFactory?,objectWrapperFactory?, 
    plugins?, 
    environments?, databaseIdProvider?, mappers?
-->
<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="">
        <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
        <property name="param1" value="value1"/>
	</plugin>
</plugins>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2 在 Spring 配置文件中配置拦截器插件

<bean id="sqlSessionFactory" class="">
  <!-- 注意其他配置 -->
  <property name="plugins">
    <array>
      <bean class="">
        <property name="properties">
          <!--使用下面的方式配置参数,一行配置一个 -->
          <value>
            params=value1
          </value>
        </property>
      </bean>
    </array>
  </property>
</bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

分页参数介绍

关于分页参数的介绍会在下一篇中,详细介绍,敬请期待 !

代码中调用

PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectIf(1);
  • 1
  • 2

注意 startPage 必须要紧跟在查询方法前面,有且仅能支持下一行查询分页,上面代码表示查询第一页,页面最大记录数为10的记录

项目中遇到的坑

再配合dubbo 使用的时候,经常会出现一个Page类未实现序列化的警告,非常恼火:

警告: Hessian/Burlap: '' is an unknown class in WebappClassLoader

  context:

  delegate: false

  repositories:

----------> Parent Classloader:

ClassRealm[plugin>org.apache.tomcat.maven:tomcat7-maven-plugin:2.2, parent: sun.misc.Launcher$AppClassLoader@55f96302]

:

java.lang.ClassNotFoundException: com.github.pagehelper.Page
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

使用 pagehelper插件时,会使用到其中一个类 ,然而在和dubbo配合使用的时候,在序列化和反序列化的过程中没有找到这个类。
解决方案:是在业务层(接收查询返回的那个系统模块,同样也要引入pagehelper的依赖;或者修改其底层源码,让实现序列化)