前言
最近在用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的依赖;或者修改其底层源码,让实现序列化)