[collectionUtil]使用方法-從mybatisPlus分頁或者是mybatisPageHelper分頁無縫兼容

感謝使用本代碼,希望能幫到你,正如的mybatisPageHelper幫了大家一樣

這個插件的存在只爲了解決n+1這個另我個人束手無策的問題,而不是想去代替分頁插件

此插件本身是爲了解決n+1的問題,如果你覺得依賴過度,它仍適用於普通分頁場景,但是在個別場景下會性能不如別的分頁插件,畢竟內部使用了特殊處理的count的sql語句,稍後我會帶來插件的詳解,如果注重性能問題,請在普通分頁使用其它專業的插件,而在n+1問題上使用collectionUtil

<dependency>
  <groupId>com.github.aly8246</groupId>
  <artifactId>collection-util</artifactId>
  <version>1.1.1.RELEASE</version>
</dependency>

具體使用方法也可以參照github源碼 源碼地址[collection-util-test項目]


在這裏插入圖片描述
正如圖中看到,這個插件和mybatisPageHelper共存並且互不影響

使用方式:

  1. 在mapper接口方法上面加個Page 類,並且可以隨意位置隨意命名,但是一定要是com.ddd.collectionutil.collectionutil.model.Page的Page
    (https://img-blog.csdnimg.cn/20190927213405970.png)2.分頁執行成功,CollectionUtil.get()通過此靜態方法來獲取返回類,而原本是service代碼可以不再返回二少通過CollectionUtil.get()來獲取分頁結果 ,其中包括了頁大小總頁數等參數
    在這裏插入圖片描述

注:
放在controller還是service都可以啦


大略使用,我也不會去記得這些代碼,當我改造的時候是直接從下面的代碼塊複製這些代碼然後修改,如果需要知道改造流程請看下一個注意點

controller:
//這裏的page是mp的分頁或者是任意分頁,我選擇在service轉換分頁類
CollectionUtil.packMPResult(rProductService.selectProductSupplyDefine(page));//此時可以直接return,如果需要再次修改分頁查詢數據請看下面的代碼塊


service:
//service本身的方法是mp的苞米豆Page類,也可以是自己定義的分頁類
public List<XXXX> selectXXXXXXX(com.yccs.pojo.implement.Page page){
	com.github.aly8246.collectionutil.model.Page page1 = new com.github.aly8246.collectionutil.model.Page();
	page1.setPage(Integer.parseInt(String.valueOf(page.getCurrent())));
	page1.setPageSize(Integer.parseInt(String.valueOf(page.getSize())));
	xxxxMapper.selectXXXX(page1);
}

mapper:
List<XXXX> selectXXXX(@Param("page") com.github.aly8246.collectionutil.model.Page page);
com.github.aly8246.collectionutil.util.IPage<SupplyProductListVo> rProductList = CollectionUtil.packMPResult(rProductService.selectProductSupplyAuction2(page, null, type));
	
	//如果需要對返回的分頁結果進行調整,CollectionUtil.packMPResult返回的就是和mp一樣
rProductList.getRecords().foreach(e->{
	//TODO 在此對你的數據進行再次修改
})

注:
在這裏插入圖片描述get方法裏可以隨便傳點什麼進去,對結果沒有什麼影響,但是一定程度上解決了強迫症患者的問題,就好比我喜歡把代碼寫成一行
在這裏插入圖片描述

特大好消息:

這個mybatis插件誕生的原因就是因爲項目使用的mybatis plus(雨女無瓜),首先測試了兼容mybatisPageHelper,現在mp的兼容性測試也通過了

廢話不多說,上我的項目把混亂分頁遷移到collectionUtil的姿勢

  1. 改造dao的接口方法
//step1.第一個參數爲苞米豆Page類
//step2.將苞米豆Page換成collectionUtil的Page類,不需要放到第一個,任意位置就可以了,看心情
IPage<BOrderVo> selectAllOrder(Page page,String id,String name);
↓   ↓   ↓       一定要更換,否則還是使用mybatisPlus分頁
 Page->com.github.aly8246.collectionutil.model.Page page1
↓   ↓   ↓ 
IPage<BOrderVo> selectAllOrder(com.github.aly8246.collectionutil.model.Pagepage,String id,String name);

//step3.將返回類型還原爲List
↓   ↓   ↓ 
List<BOrderVo> selectAllOrder(com.github.aly8246.collectionutil.model.Pagepage,String id,String name);
  1. 改造service
    隨便搞搞就行
  2. 改造controller
step1.  構建步驟1需要的Page類,當然也可以直接把Page類放到參數上讓前端傳遞
        這裏選擇傳遞mp的Page類,爲了和別的接口統一

com.github.aly8246.collectionutil.model.Page page1 = new com.github.aly8246.collectionutil.model.Page();
page1.setPage(Integer.parseInt(String.valueOf(page.getCurrent())));
page1.setPageSize(Integer.parseInt(String.valueOf(page.getSize())));

step2.調用service->調用dao的selectAllOrder方法,將com.github.aly8246.collectionutil.model.Page傳遞到參數列表

bOrderService.selectAllOrder(page, member.getUserId(), state, page1);

step3. 通過CollectionUtil來獲取一個包裝成mp返回類的工具
IPage iPage = CollectionUtil.packMPResult();

在這裏插入圖片描述在這裏插入圖片描述當分頁大小爲1的時候,訂單裏的多個產品都在!而沒有n+1 的問題(分頁大小爲1的時候只有一個產品數據)

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