Mybatis 的分頁插件 PageHelperhtml
使用方法:
一、根據Mybatis的版本下載對應版本的PageHelper ( Mybatis最低版本不能低於3.3 )
二、在Mybatis的配置文件 Mybatis-Configu.xml中配置PageHelper插件,配置示例:
plugins插件的配置在 settings以後 在environments以前
settings中設置Mybatis的一些額外的運行參數 如是否開啓延遲加載,動態代理使用CG-LIB,或JAVALIB等
<plugins>
<!-- PageHelper4.1.1 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="oracle"/>
<property name="offsetAsPageNum" value="false"/>
<property name="rowBoundsWithCount" value="false"/>
<property name="pageSizeZero" value="true"/>
<property name="reasonable" value="false"/>
<property name="supportMethodsArguments" value="false"/>
<property name="returnPageInfo" value="none"/>
</plugin>
</plugins>
三、使用方法
pageHelper會使用ThreadLocal獲取到同一線程中的變量信息,各個線程之間的Threadlocal不會相互干擾,也就是Thread1中的ThreadLocal1以後獲取到Tread1中的變量的信息,不會獲取到Thread2中的信息
因此在多線程環境下,各個Threadlocal之間相互隔離,能夠實現,不一樣thread使用不一樣的數據源或不一樣的Thread中執行不一樣的SQL語句
因此,PageHelper利用這一點經過攔截器獲取到同一線程中的預編譯好的SQL語句以後將SQL語句包裝成具備分頁功能的SQL語句,並將其再次賦值給下一步操做,因此實際執行的SQL語句就是有了分頁功能的SQL語句
PageHelper只對緊跟着的第一個SQL語句起做用
如上:因此若一個方法中涉及到多個查詢,須要當心,避免爲不須要分頁的添加了分頁,而真正須要分頁的卻沒有被分頁
1)、統計總數,(將SQL語句變爲 select count(0) from xxx,只對簡單SQL語句其效果,複雜SQL語句須要本身寫)
Page<?> page = PageHelper.startPage(1,-1);
long count = page.getTotal();
2)、分頁,pageNum - 第N頁, pageSize - 每頁M條數
A、只分頁不統計(每次只執行分頁語句)
PageHelper.startPage([pageNum],[pageSize]);
List<?> pagelist = queryForList( xxx.class, "queryAll" , param);
//pagelist就是分頁以後的結果
B、分頁並統計(每次執行2條語句,一條select count語句,一條分頁語句)適用於查詢分頁時數據發生變更,須要將實時的變更信息反映到分頁結果上
Page<?> page = PageHelper.startPage([pageNum],[pageSize],[iscount]);
List<?> pagelist = queryForList( xxx.class , "queryAll" , param);
long count = page.getTotal();
//也能夠 List<?> pagelist = page.getList(); 獲取分頁後的結果集
3)、使用PageHelper查所有(不分頁)
PageHelper.startPage(1,0);
List<?> alllist = queryForList( xxx.class , "queryAll" , param);
4)、PageHelper的其餘API
String orderBy = PageHelper.getOrderBy(); //獲取orderBy語句
Page<?> page = PageHelper.startPage(Object params);
Page<?> page = PageHelper.startPage(int pageNum, int pageSize);
Page<?> page = PageHelper.startPage(int pageNum, int pageSize, boolean isCount);
Page<?> page = PageHelper.startPage(pageNum, pageSize, orderBy);
Page<?> page = PageHelper.startPage(pageNum, pageSize, isCount, isReasonable); //isReasonable分頁合理化,null時用默認配置
Page<?> page = PageHelper.startPage(pageNum, pageSize, isCount, isReasonable, isPageSizeZero); //isPageSizeZero是否支持PageSize爲0,true且pageSize=0時返回所有結果,false時分頁,null時用默認配置
5)、默認值
//RowBounds參數offset做爲PageNum使用 - 默認不使用
private boolean offsetAsPageNum = false;
//RowBounds是否進行count查詢 - 默認不查詢
private boolean rowBoundsWithCount = false;
//當設置爲true的時候,若是pagesize設置爲0(或RowBounds的limit=0),就不執行分頁,返回所有結果
private boolean pageSizeZero = false;
//分頁合理化
private boolean reasonable = false;
//是否支持接口參數來傳遞分頁參數,默認false
private boolean supportMethodsArguments = false;
http://www.cnblogs.com/xiaoxinwt/p/5329840.html