Mybatis 的分頁插件PageHelper-4.1.1的使用

Mybatis 的分頁插件 PageHelperhtml

 
我用的版本是PageHelper-4.1.1Mybatis-3.3.0
PageHelper 依賴於 jsqlparser-0.9.4.jar
 
使用方法:
一、根據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(pageNumpageSizeorderBy);
    Page<?> page = PageHelper.startPage(pageNumpageSizeisCountisReasonable);    //isReasonable分頁合理化,null時用默認配置
    Page<?> page = PageHelper.startPage(pageNumpageSizeisCountisReasonableisPageSizeZero);    //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
相關文章
相關標籤/搜索