使用PageHelper插件獲取數據總條數不對的問題的解決方案

PageHelper 這個插件用了很多次了,今天使用的時候才發現中間有一個大坑,就是使用這個插件中間只能有一次查詢的操作語句,不能再添加其它語句(兩行代碼之間不能再有其他代碼)!

例如,我們一般都是這樣進行查詢:

//創建一個PageResult對象出來
PageResult<AdvertInfo> pageResult = new PageResult<>();

//開啓分頁,pageNum代表當前頁數,pageSize代表每頁總數
PageHelper.startPage(pageNum, pageSize);

//查詢數據庫的語句,pageHelper在這裏做一次攔截器操作
List<AdvertInfo> advertList = advertMapper.getAdvertList(advertInfoParam);

//使用PageInfo包裝結果
PageInfo<AdvertInfo> pageInfo = new PageInfo<>(advertList);

上述操作是這樣的,但是如果我們需要將查詢的 List<AdvertInfo>轉換成前端展示的 ViewObject 對象,那麼我們想當然會在中間做一次操作:

PageHelper.startPage(pageNum, pageSize);

List<AdvertInfo> advertList = advertMapper.getAdvertList(advertInfoParam);

//將AdvertInfo某些字段要隱藏,不在前臺展示,所以需要轉換成前端需要的bean對象
List<AdvertInfoVO> AdvertInfoList = new ArrayList<>();

for (AdvertInfo info : pageInfo.getList()) {

    res.add(convertAdvertInfoToVO(info));
}

//然後再包裝一下前端對象
PageInfo<AdvertInfoVO> pageInfo = new PageInfo<>(AdvertInfoList);

這樣獲取的 pageInfo.getTotal()一直是當前的 pageSize總數,而不是查詢的總條數。所以,我們最好不要在 pageHelper 兩個語句中間插入其它語句,而是在後面做一些操作:

//分頁查詢
PageHelper.startPage(pageNum, pageSize);

List<AdvertInfo> advertList = advertMapper.getAdvertList(advertInfoParam);

PageInfo<AdvertInfo> pageInfo = new PageInfo<>(advertList);

//轉換成前端VO
List<AdvertInfoVO> advertInfoList = new ArrayList<>();

for (AdvertInfoinfo : pageInfo.getList()) {

    advertInfoList.add(convertAdvertInfoToVO(info));

}

//那麼這樣就可以正確返回了!
return new LayuiTableResult(0, "查詢成功", pageInfo.getTotal(), advertInfoList);

 

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