PageHelper概述与基本使用步骤介绍
訂單分頁查詢
PageHelper介紹
PageHelper是國內(nèi)非常優(yōu)秀的一款開源的mybatis分頁插件,它支持基本主流與常用的數(shù)據(jù)庫,例如mysql、oracle、mariaDB、DB2、SQLite、Hsqldb等。
本項(xiàng)目在 github 的項(xiàng)目地址:https://github.com/pagehelper/Mybatis-PageHelper
本項(xiàng)目在 gitosc 的項(xiàng)目地址:http://git.oschina.net/free/Mybatis_PageHelper
PageHelper使用
集成
引入分頁插件有下面2種方式,推薦使用 Maven 方式。
引入 Jar 包
你可以從下面的地址中下載最新版本的 jar 包
https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/
http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/
由于使用了sql 解析工具,你還需要下載 jsqlparser.jar:
http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.5/
使用 Maven
在 pom.xml 中添加如下依賴:
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>最新版本</version> </dependency>配置
特別注意,新版攔截器是 com.github.pagehelper.PageInterceptor 。 com.github.pagehelper.PageHelper 現(xiàn)在是一個(gè)特殊的 dialect 實(shí)現(xiàn)類,是分頁插件的默認(rèn)實(shí)現(xiàn)類,提供了和以前相同的用法。
在 MyBatis 配置 xml 中配置攔截器插件
<!--plugins在配置文件中的位置必須符合要求,否則會(huì)報(bào)錯(cuò),順序如下:properties?, settings?,typeAliases?, typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?, databaseIdProvider?, mappers? --> <plugins><!-- com.github.pagehelper為PageHelper類所在包名 --><plugin interceptor="com.github.pagehelper.PageInterceptor"><!-- 使用下面的方式配置參數(shù),后面會(huì)有所有的參數(shù)介紹 --><property name="param1" value="value1"/></plugin> </plugins>在 Spring 配置文件中配置攔截器插件
使用 spring 的屬性配置方式,可以使用 plugins 屬性像下面這樣配置:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 注意其他配置 --><property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><!--使用下面的方式配置參數(shù),一行配置一個(gè) --><value>params=value1</value></property></bean></array></property> </bean>分頁插件參數(shù)介紹
1. helperDialect :分頁插件會(huì)自動(dòng)檢測(cè)當(dāng)前的數(shù)據(jù)庫鏈接,自動(dòng)選擇合適的分頁方式。 你可以配置helperDialect 屬性來指定分頁插件使用哪種方言。配置時(shí),可以使用下面的縮寫值:oracle , mysql , mariadb , sqlite , hsqldb , postgresql , db2 , sqlserver , informix , h2 , sqlserver201
2 , derby
特別注意:使用 SqlServer2012 數(shù)據(jù)庫時(shí),需要手動(dòng)指定為 sqlserver2012 ,否則會(huì)使用 SqlServer2005 的方式進(jìn)行分頁。
你也可以實(shí)現(xiàn) AbstractHelperDialect ,然后配置該屬性為實(shí)現(xiàn)類的全限定名稱即可使用自定義的實(shí)現(xiàn)方法。
2. offsetAsPageNum :默認(rèn)值為 false ,該參數(shù)對(duì)使用 RowBounds 作為分頁參數(shù)時(shí)有效。 當(dāng)該參數(shù)設(shè)置為true 時(shí),會(huì)將 RowBounds 中的 offset 參數(shù)當(dāng)成 pageNum 使用,可以用頁碼和頁面大小兩個(gè)參數(shù)進(jìn)行分頁。
3. rowBoundsWithCount :默認(rèn)值為false ,該參數(shù)對(duì)使用 RowBounds 作為分頁參數(shù)時(shí)有效。 當(dāng)該參數(shù)設(shè)置為true 時(shí),使用 RowBounds 分頁會(huì)進(jìn)行 count 查詢。
4. pageSizeZero :默認(rèn)值為 false ,當(dāng)該參數(shù)設(shè)置為 true 時(shí),如果 pageSize=0 或者 RowBounds.limit =0 就會(huì)查詢出全部的結(jié)果(相當(dāng)于沒有執(zhí)行分頁查詢,但是返回結(jié)果仍然是 Page 類型)。
5. reasonable :分頁合理化參數(shù),默認(rèn)值為false 。當(dāng)該參數(shù)設(shè)置為 true 時(shí), pageNum<=0 時(shí)會(huì)查詢第一頁, pageNum>pages (超過總數(shù)時(shí)),會(huì)查詢最后一頁。默認(rèn)false 時(shí),直接根據(jù)參數(shù)進(jìn)行查詢。
6. params :為了支持startPage(Object params) 方法,增加了該參數(shù)來配置參數(shù)映射,用于從對(duì)象中根據(jù)屬性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable ,不配置映射的用默認(rèn)值, 默認(rèn)值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。
7. supportMethodsArguments :支持通過 Mapper 接口參數(shù)來傳遞分頁參數(shù),默認(rèn)值false ,分頁插件會(huì)從查詢方法的參數(shù)值中,自動(dòng)根據(jù)上面 params 配置的字段中取值,查找到合適的值時(shí)就會(huì)自動(dòng)分頁。 使用方法可以參考測(cè)試代碼中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和ArgumentsObjTest 。
8. autoRuntimeDialect :默認(rèn)值為 false 。設(shè)置為 true 時(shí),允許在運(yùn)行時(shí)根據(jù)多數(shù)據(jù)源自動(dòng)識(shí)別對(duì)應(yīng)方言的分頁 (不支持自動(dòng)選擇sqlserver2012 ,只能使用sqlserver ),用法和注意事項(xiàng)參考下面的場(chǎng)景五。
9. closeConn :默認(rèn)值為 true 。當(dāng)使用運(yùn)行時(shí)動(dòng)態(tài)數(shù)據(jù)源或沒有設(shè)置 helperDialect 屬性自動(dòng)獲取數(shù)據(jù)庫類型時(shí),會(huì)自動(dòng)獲取一個(gè)數(shù)據(jù)庫連接, 通過該屬性來設(shè)置是否關(guān)閉獲取的這個(gè)連接,默認(rèn)true 關(guān)閉,設(shè)置為false 后,不會(huì)關(guān)閉獲取的連接,這個(gè)參數(shù)的設(shè)置要根據(jù)自己選擇的數(shù)據(jù)源來決定。
基本使用
PageHelper的基本使用有6種,大家可以查看文檔,最常用的有兩種
RowBounds方式的調(diào)用(了解)
List<Country> list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(1, 10));使用這種調(diào)用方式時(shí),你可以使用RowBounds參數(shù)進(jìn)行分頁,這種方式侵入性最小,我們可以看到,通過RowBounds方式調(diào)用只是使用了這個(gè)參數(shù),并沒有增加其他任何內(nèi)容。
分頁插件檢測(cè)到使用了RowBounds參數(shù)時(shí),就會(huì)對(duì)該查詢進(jìn)行物理分頁。
關(guān)于這種方式的調(diào)用,有兩個(gè)特殊的參數(shù)是針對(duì) RowBounds 的,你可以參看上面的分頁插件參數(shù)介紹
注:不只有命名空間方式可以用RowBounds,使用接口的時(shí)候也可以增加RowBounds參數(shù),例如:
//這種情況下也會(huì)進(jìn)行物理分頁查詢 List<Country> selectAll(RowBounds rowBounds);注意: 由于默認(rèn)情況下的 RowBounds 無法獲取查詢總數(shù),分頁插件提供了一個(gè)繼承自 RowBounds 的PageRowBounds ,這個(gè)對(duì)象中增加了 total 屬性,執(zhí)行分頁查詢后,可以從該屬性得到查詢總數(shù)。
PageHelper.startPage 靜態(tài)方法調(diào)用(重點(diǎn))
這種方式是我們要掌握的 在你需要進(jìn)行分頁的 MyBatis 查詢方法前調(diào)用PageHelper.startPage 靜態(tài)方法即可,緊跟在這個(gè)方法后的第一個(gè)MyBatis 查詢方法會(huì)被進(jìn)行分頁。
//獲取第1頁,10條內(nèi)容,默認(rèn)查詢總數(shù)count PageHelper.startPage(1, 10); //緊跟著的第一個(gè)select方法會(huì)被分頁 List<Country> list = countryMapper.selectIf(1);?
總結(jié)
以上是生活随笔為你收集整理的PageHelper概述与基本使用步骤介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 订单操作-表结构分析与表创建
- 下一篇: 订单操作-分页查询所有订单