1. 程式人生 > >Mybatis 的分頁插件 PageHelper

Mybatis 的分頁插件 PageHelper

per -s cor 傳遞 配置 nvi str 其他 代理

我用的版本是PageHelper-4.1.1、Mybatis-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;

Mybatis 的分頁插件 PageHelper