pageHelper分頁原理及實戰

mybatis插件-pageHelper是我們實際開發中常見的分頁工具。

一.PageHelper方法分頁的原理

      PageHelper方法使用了靜態的ThreadLocal參數,分頁參數和線程是綁定的。內部流程是ThreadLocal中設置了分頁參數(pageIndex,pageSize),之後在查詢執行的時候,獲取當線程中的分頁參數,執行查詢的時候通過攔截器在sql語句中添加分頁參數,之後實現分頁查詢,查詢結束後在 finally 語句中清除ThreadLocal中的查詢參數

二.使用方法:

                     1.調用PageHelper方法:PageHelper.startPage(pageIndex, pageSize)

                     2. MyBatis 查詢方法

       注意:只要你可以保證在PageHelper方法調用後緊跟 MyBatis 查詢方法,這就是安全的。因爲PageHelper在finally代碼段中自動清除了ThreadLocal存儲的對象。


三.具體使用項目案列:

1.在api層中如下:

 

 

2.在controller中如下:

page<TbRptManage> myReport(String userId.Integer pageIndex,Integer pageSize){

page<TbRptManage> myReportPage=cognosDisplayService.getMyReport(userId,pageIndex,pageSize);

if(myReportPage.getTotal()>0){

list<TbRptManage> menuVos=myReportPage.stream().map(po -> CopyUtils.copyProperties(po,TbRptManage.class)).

collect(Collectors.toList());

return  RestResponse.page(menuVos,PageInfo.instancefrom(myReportPage.toPageInfo()));

}

註解:

##steam():把一個源數據,可以是集合,數組,I/O channel, 產生器generator 等,轉化成流。

##map():用於映射每個元素到對應的結果,以下代碼片段使用 map 輸出了元素對應的平方數:

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); // 獲取對應的平方數

List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

##Collectors(): 類實現了很多歸約操作,例如將流轉換成集合和聚合元素,Collectors 可用於返回列表或字符串:

  


3.在serviceImpl層中,調用PageHelper.startPage(pageIndex,pageSize)方法,後跟查詢語句,

如圖所示:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章