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)方法,後跟查詢語句,
如圖所示: