Java中PageHelper分頁后對list操作導致分頁無效
1.問題
阿里巴巴Java開發(fā)手冊
1.1.PageHelper先開啟分頁,后對list數(shù)據(jù)操作
@Override public PageInfo<HdQueryVo> getRecordsByView(int pageNo, int pageSize) { PageHelper.startPage(pageNo,pageSize); List<HdQueryVo> hdQueryVosByView = actionMapper.getActionByView(); List<HdQueryVo> hdQueryVos = new ArrayList<>(); for (HdQueryVo hdQueryVo : hdQueryVosByView) { HdQueryVo hdQueryVoSingle = new HdQueryVo(); hdQueryVoSingle.setHdId(hdQueryVo.getHdId()); hdQueryVoSingle.setHdType(hdQueryVo.getHdType()); hdQueryVoSingle.setHdTitle(hdQueryVo.getHdTitle()); hdQueryVoSingle.setHdStartDate(hdQueryVo.getHdStartDate()); hdQueryVoSingle.setHdEndDate(hdQueryVo.getHdEndDate()); hdQueryVoSingle.setHdStatus(hdQueryVo.getHdStatus()); hdQueryVoSingle.setHdImage(hdQueryVo.getHdImage()); hdQueryVoSingle.setHdNumber(hdQueryVo.getHdNumber()); hdQueryVoSingle.setGmtCreate(hdQueryVo.getGmtCreate()); hdQueryVoSingle.setGmtModified(hdQueryVo.getGmtModified()); hdQueryVoSingle.setUserId(hdQueryVo.getUserId()); if (hdQueryVo.getHdType().equals(0)) { hdQueryVoSingle.setHdJoinUsers(onlineWorksMapper.getOnlineJoinUsers(hdQueryVo.getHdId())); } else { hdQueryVoSingle.setHdJoinUsers(offlineUsersMapper.getOfflineJoinUsers(hdQueryVo.getHdId())); } hdQueryVos.add(hdQueryVoSingle); } PageInfo<HdQueryVo> pageViewInfo = new PageInfo<>(hdQueryVos); return pageViewInfo; }
可以分頁,但是數(shù)據(jù)量錯誤,total始終等于每頁數(shù)據(jù)量,即pageSize
1.2.先對list數(shù)據(jù)進行操作,后開啟分頁
@Override public PageInfo<HdQueryVo> getRecordsByView(int pageNo, int pageSize) { List<HdQueryVo> hdQueryVosByView = actionMapper.getActionByView(); List<HdQueryVo> hdQueryVos = new ArrayList<>(); for (HdQueryVo hdQueryVo : hdQueryVosByView) { HdQueryVo hdQueryVoSingle = new HdQueryVo(); hdQueryVoSingle.setHdId(hdQueryVo.getHdId()); hdQueryVoSingle.setHdType(hdQueryVo.getHdType()); hdQueryVoSingle.setHdTitle(hdQueryVo.getHdTitle()); hdQueryVoSingle.setHdStartDate(hdQueryVo.getHdStartDate()); hdQueryVoSingle.setHdEndDate(hdQueryVo.getHdEndDate()); hdQueryVoSingle.setHdStatus(hdQueryVo.getHdStatus()); hdQueryVoSingle.setHdImage(hdQueryVo.getHdImage()); hdQueryVoSingle.setHdNumber(hdQueryVo.getHdNumber()); hdQueryVoSingle.setGmtCreate(hdQueryVo.getGmtCreate()); hdQueryVoSingle.setGmtModified(hdQueryVo.getGmtModified()); hdQueryVoSingle.setUserId(hdQueryVo.getUserId()); if (hdQueryVo.getHdType().equals(0)) { hdQueryVoSingle.setHdJoinUsers(onlineWorksMapper.getOnlineJoinUsers(hdQueryVo.getHdId())); } else { hdQueryVoSingle.setHdJoinUsers(offlineUsersMapper.getOfflineJoinUsers(hdQueryVo.getHdId())); } hdQueryVos.add(hdQueryVoSingle); } PageHelper.startPage(pageNo,pageSize); PageInfo<HdQueryVo> pageViewInfo = new PageInfo<>(hdQueryVos); return pageViewInfo; }
數(shù)據(jù)可以查詢出來,總數(shù)total也正確,但是分頁功能失效
2.原因
PageHelper中startPage開啟分頁方法只對后面的sql查詢起作用
1.1 錯誤原因是提前開啟分頁后,對list操作,即PageInfo pageViewInfo = new PageInfo<>(hdQueryVos);
/** * 包裝Page對象 * * @param list */ public PageInfo(List list) { this(list, 8); }
只是把list轉(zhuǎn)為PageInfo對象,不影響前面分頁數(shù)據(jù)的操作
1.2 錯誤原因是先對list操作后,開啟翻頁后沒有sql語句
即sql語句沒有參與分頁查詢
3.解決方案
直接對分頁后的PageInfo對象中的數(shù)據(jù)進行操作
①對list集合操作,先取出PageInfo里的list集合數(shù)據(jù),再對數(shù)據(jù)進行相關操作
②將操作完后的list集合再次存到PageInfo里,進行return
@Override public PageInfo<HdQueryVo> getRecordsByView(int pageNo, int pageSize) { PageInfo<HdQueryVo> source = PageHelper.startPage(pageNo, pageSize).doSelectPageInfo(()->{ actionMapper.getActionByView(); }); // 需要轉(zhuǎn)換的對象 PageInfo<HdQueryVo> target = new PageInfo<>(); // 復制分頁屬性 BeanUtils.copyProperties(source, target); // 對查詢的list進行下一步操作,比如類型轉(zhuǎn)換后 List<HdQueryVo> collect = source.getList().stream().collect(Collectors.toList()); List<HdQueryVo> hdQueryVos = new ArrayList<>(); for (HdQueryVo hdQueryVo : collect) { HdQueryVo hdQueryVoSingle = new HdQueryVo(); hdQueryVoSingle.setHdId(hdQueryVo.getHdId()); hdQueryVoSingle.setHdType(hdQueryVo.getHdType()); hdQueryVoSingle.setHdTitle(hdQueryVo.getHdTitle()); hdQueryVoSingle.setHdStartDate(hdQueryVo.getHdStartDate()); hdQueryVoSingle.setHdEndDate(hdQueryVo.getHdEndDate()); hdQueryVoSingle.setHdStatus(hdQueryVo.getHdStatus()); hdQueryVoSingle.setHdImage(hdQueryVo.getHdImage()); hdQueryVoSingle.setHdNumber(hdQueryVo.getHdNumber()); hdQueryVoSingle.setGmtCreate(hdQueryVo.getGmtCreate()); hdQueryVoSingle.setGmtModified(hdQueryVo.getGmtModified()); hdQueryVoSingle.setUserId(hdQueryVo.getUserId()); if (hdQueryVo.getHdType().equals(0)) { hdQueryVoSingle.setHdJoinUsers(onlineWorksMapper.getOnlineJoinUsers(hdQueryVo.getHdId())); } else { hdQueryVoSingle.setHdJoinUsers(offlineUsersMapper.getOfflineJoinUsers(hdQueryVo.getHdId())); } hdQueryVos.add(hdQueryVoSingle); } // 加工后的數(shù)據(jù)放入新的pageinfo target.setList(hdQueryVos); return target; }
參考資料:
PageHelper官方文檔
PageHelper分頁查詢結果后再對數(shù)據(jù)List操作的方法
到此這篇關于Java中PageHelper分頁后對list操作導致分頁無效的文章就介紹到這了,更多相關Java PageHelper分頁無效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
myatisplus的saveOrUpdate的提交總是update問題
這篇文章主要介紹了myatisplus的saveOrUpdate的提交總是update問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11java復制文件的4種方式及拷貝文件到另一個目錄下的實例代碼
這篇文章主要介紹了java復制文件的4種方式,通過實例帶給大家介紹了java 拷貝文件到另一個目錄下的方法,需要的朋友可以參考下2018-06-06Java 數(shù)據(jù)結構鏈表操作實現(xiàn)代碼
這篇文章主要介紹了Java 數(shù)據(jù)結構鏈表操作的相關資料,并附實例代碼,需要的朋友可以參考下2016-10-10使用Java實現(xiàn)百萬Excel數(shù)據(jù)導出
這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)百萬Excel數(shù)據(jù)導出,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下2024-03-03Intellij Idea部署OpenCV 4.0.0環(huán)境
這篇文章主要為大家詳細介紹了Intellij Idea部署OpenCV 4.0.0環(huán)境,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07