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


Mybatis 的分頁插件 PageHelper

我用的版本是PageHelper-4.1.1Mybatis-3.3.0
PageHelper 依賴於 jsqlparser-0.9.4.jar

使用方法:
1、根據Mybatis的版本下載對應版本的PageHelper ( Mybatis最低版本不能低於3.3 )
2、在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>  
3、使用方法
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;  







附件列表

     


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM