一、PageHelper的介紹
PageHelper是國內非常優秀的一款開源的mybatis分頁插件,它支持基本主流與常用的數據庫,例如mysql、oracle、mariaDB、DB2、SQLite、Hsqldb等。
PageHelper以我目前淺淺的瞭解是:其本質是封裝了一個pagebean類,我們所查詢傳遞過來的currentpage(當前頁)和pagesize(每頁要顯示的條數)封裝到一個bean類中,在這個框架中的這個類是 PageInfo 。裏面有當前的頁數、當前頁的記錄數、總頁數、總的記錄數、每頁顯示的數據的集合等等其他的。
下面是在GitHub和碼雲上的更爲詳細的參考文檔
本項目在 github 的項目地址
本項目在 gitosc 的項目地址
二、PageHelper入門使用
這個是在maven中的使用,使用的是SSM的框架,下面是一個簡單搭建PageHelper。
1、在pom.xml中添加如下依賴
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
2、配置
注意:在 MyBatis 配置 xml 中配置攔截器插件 和 在 Spring 配置文件中配置攔截器插件,只需要在使用一個配置就可以,二者選其一就可以了。
2.2.1、在 MyBatis 配置 xml 中配置攔截器插件
<!--
plugins在配置文件中的位置必須符合要求,否則會報錯,順序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?
-->
<plugins>
<!-- com.github.pagehelper爲PageHelper類所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置參數,後面會有所有的參數介紹 -->
<property name="param1" value="value1"/>
</plugin>
</plugins>
2.2.2、在 Spring 配置文件中配置攔截器插件
<!-- 把交給IOC管理 SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 傳入PageHelper的插件 -->
<property name="plugins">
<array>
<!--傳入插件的對象-->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置參數,一行配置一個 -->
<props>
<!--分頁插件會自動檢測當前的數據庫鏈接,自動選擇合適的分頁方式。
你可以配置 helperDialect 屬性來指定分頁插件使用哪種方言-->
<prop key="helperDialect">oracle</prop>
<!--分頁合理化參數,默認值爲false 。
當該參數設置爲 true 時, pageNum<=0 時會查詢第一頁,
pageNum>pages (超過總數時),會查詢最後一頁。
默認false 時,直接根據參數進行查詢。-->
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
2.2.3、基本使用
2.2.3.1、PageHelper.startPage 靜態方法調用
這種方式是我們要掌握的 在你需要進行分頁的 MyBatis 查詢方法前調用PageHelper.startPage 靜態方法即可,緊跟在這個方法後的第一個MyBatis 查詢方法會被進行分頁。
例:在service中的使用
//獲取第1頁,10條內容,默認查詢總數count
PageHelper.startPage(1, 10);
//緊跟着的第一個select方法會被分頁
List list = countryMapper.selectIf(1);
2.2.4、在controller中的使用
//查詢所有的訂單 --分頁
@RequestMapping("/findAllFenYe.do")
public ModelAndView findAllFenYe(@RequestParam(name = "page", required = true, defaultValue = "1") Integer page, @RequestParam(name = "pageSize", required = true, defaultValue = "4") Integer pageSize) throws Exception{
ModelAndView mv = new ModelAndView();
List<Orders> orders=ordersService.findAllFenYe(page,pageSize);
//PageInfo 就是一個分頁的bean
PageInfo pageInfo = new PageInfo(orders);
mv.addObject("pageInfo",pageInfo);
mv.setViewName("orders-page-list");
return mv;
}
2.2.5、分頁插件參數介紹
helperDialect :分頁插件會自動檢測當前的數據庫鏈接,自動選擇合適的分頁方式。 你可以配置
helperDialect 屬性來指定分頁插件使用哪種方言。配置時,可以使用下面的縮寫值:
oracle , mysql , mariadb , sqlite , hsqldb , postgresql , db2 , sqlserver , informix , h2 , sqlserver201
2 , derby
特別注意:使用 SqlServer2012 數據庫時,需要手動指定爲 sqlserver2012 ,否則會使用 SqlServer2005 的
方式進行分頁。
你也可以實現 AbstractHelperDialect ,然後配置該屬性爲實現類的全限定名稱即可使用自定義的實現方
法。
2. offsetAsPageNum :默認值爲 false ,該參數對使用 RowBounds 作爲分頁參數時有效。 當該參數設置爲 true 時,會將 RowBounds 中的 offset 參數當成 pageNum 使用,可以用頁碼和頁面大小兩個參數進行分 頁。
3. rowBoundsWithCount :默認值爲false ,該參數對使用 RowBounds 作爲分頁參數時有效。 當該參數設置 爲true 時,使用 RowBounds 分頁會進行 count 查詢。
4. pageSizeZero :默認值爲 false ,當該參數設置爲 true 時,如果 pageSize=0 或者 RowBounds.limit = 0 就會查詢出全部的結果(相當於沒有執行分頁查詢,但是返回結果仍然是 Page 類型)。
5. reasonable :分頁合理化參數,默認值爲false 。當該參數設置爲 true 時, pageNum<=0 時會查詢第一 頁, pageNum>pages (超過總數時),會查詢最後一頁。默認false 時,直接根據參數進行查詢。
6. params :爲了支持startPage(Object params) 方法,增加了該參數來配置參數映射,用於從對象中根據屬 性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable ,不配置映射的用默認值,
默認 值爲
pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
。
7. supportMethodsArguments :支持通過 Mapper 接口參數來傳遞分頁參數,默認值false ,分頁插件會從查 詢方法的參數值中,自動根據上面 params 配置的字段中取值,查找到合適的值時就會自動分頁。 使用方法 可以參考測試代碼中的
com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和
ArgumentsObjTest 。
8. autoRuntimeDialect :默認值爲 false 。設置爲 true 時,允許在運行時根據多數據源自動識別對應方言 的分頁 (不支持自動選擇sqlserver2012 ,只能使用sqlserver ),用法和注意事項參考下面的場景五。
9. closeConn :默認值爲 true 。當使用運行時動態數據源或沒有設置 helperDialect 屬性自動獲取數據庫類 型時,會自動獲取一個數據庫連接, 通過該屬性來設置是否關閉獲取的這個連接,默認true 關閉,設置爲 false
後,不會關閉獲取的連接,這個參數的設置要根據自己選擇的數據源來決定。
以上就是一個PageHelper的簡單的介紹。非常感謝提供者框架的開發人員,這個框架節省了我們很多代碼的編寫,而且非常好用。無限崇拜!!!