1. Mybatis分页插件 - PageHelper说明

如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。

该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。

点击提交BUG

2. 版本说明

2.1. 最新版本为3.4.2

PageInfo中的judgePageBoudary方法修改:

    isLastPage = pageNum == pages && pageNum != 1;

//改为

    isLastPage = pageNum == pages;

2.2. 版本3.4.1

· 重大bug修复,SqlParser解析sql失败的时候返回了不带count(*)的sql,导致查询失败。

· 产生原因,由于SqlParser在系统中出现的位置修改后,导致这里出现错误。

· 强烈推荐各位更新到最新版本。

2.3. 版本3.4.0

· 增加了对@SelectProvider注解方法的支持,不使用这种方式的不影响

· 对基本逻辑进行修改,减少反射调用和获取BoundSql次数

· 对支持的数据库全部通过完整测试

· 虽然变化大,但是影响范围小,不特殊通知各位了。

3. 使用方法

分页插件项目中的正式代码一共有个5个Java文件,这5个文件的说明如下:

· Page<E>[必须]:分页参数类,该类继承ArrayList,虽然分页查询返回的结果实际类型是Page<E>,但是可以完全不出现所有的代码中,可以直接当成List使用。返回值不建议使用Page,建议仍然用List。如果需要用到分页信息,使用下面的PageInfo类对List进行包装即可。

· PageHelper[必须]:分页插件拦截器类,对Mybatis的拦截在这个类中实现。

· PageInfo[可选]:Page<E>的包装类,包含了全面的分页属性信息。

· SqlParser[可选]:提供高效的count查询sql。主要是智能替换原sql语句为count(*),去除不带参数的order by语句。需要jsqlparser-0.9.1.jar支持。

· SqlUtil[必须]:分页插件工具类,分页插件逻辑类,分页插件的主要实现方法都在这个类中。

3.1. 引入分页插件

引入分页插件一共有下面3种方式,推荐使用引入分页代码的方式,这种方式易于控制,并且可以根据自己需求进行修改。

3.1.1. 引入分页代码

将本插件中的com.github.pagehelper包(点击进入gitosc包 | 点击进入github包)下面的三个类Page,PageHelper和SqlUtil放到项目中,如果需要使用PageInfo(强大的分页包装类),也可以放到项目中。如果想使用更高效的count查询,你也可以将SqlParser放到SqlUtil相同的包下,使用SqlParser时必须使用jsqlparser-0.9.1.jar。

3.1.2. 引入Jar包

如果你想使用本项目的jar包而不是直接引入类,你可以在这里下载各个版本的jar包(点击Download下的jar即可下载)

· https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/

· http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/

由于使用了sql解析工具,你还需要下载这个文件(这个文件完全独立,不依赖其他):

· SqlParser.jar:http://search.maven.org/remotecontent?filepath=com/github/jsqlparser/jsqlparser/0.9.1/jsqlparser-0.9.1.jar

· SqlParser - github地址:https://github.com/JSQLParser/JSqlParser

3.1.3. 使用maven

添加如下依赖:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>0.9.1</version>
</dependency>

3.2. 在Mybatis配置xml中配置拦截器插件:

 1 <!-- 
 2 
 3     plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
 4 
 5     properties?, settings?, 
 6 
 7     typeAliases?, typeHandlers?, 
 8 
 9     objectFactory?,objectWrapperFactory?, 
10 
11     plugins?, 
12 
13     environments?, databaseIdProvider?, mappers?
14 
15 -->
16 
17 <plugins>
18 
19 <!-- com.github.pagehelper为PageHelper类所在包名 -->
20 
21     <plugin interceptor="com.github.pagehelper.PageHelper">
22 
23         <property name="dialect" value="mysql"/>
24 
25 <!-- 该参数默认为false -->
26 
27 <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
28 
29 <!-- 和startPage中的pageNum效果一样-->
30 
31         <property name="offsetAsPageNum" value="true"/>
32 
33 <!-- 该参数默认为false -->
34 
35 <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
36 
37         <property name="rowBoundsWithCount" value="true"/>
38 
39 <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
40 
41 <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
42 
43         <property name="pageSizeZero" value="true"/>
44 
45 <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
46 
47 <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
48 
49 <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
50 
51         <property name="reasonable" value="true"/>
52 
53     </plugin>
54 
55 </plugins>
View Code

相关文章: