Java中PageHelper分頁后對list操作導(dǎo)致分頁無效
阿里巴巴Java開發(fā)手冊
@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
@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也正確,但是分頁功能失效
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ù)進(jìn)行操作①對list集合操作,先取出PageInfo里的list集合數(shù)據(jù),再對數(shù)據(jù)進(jìn)行相關(guān)操作②將操作完后的list集合再次存到PageInfo里,進(jìn)行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<>();// 復(fù)制分頁屬性BeanUtils.copyProperties(source, target);// 對查詢的list進(jìn)行下一步操作,比如類型轉(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ù)放入新的pageinfotarget.setList(hdQueryVos);return target; }
參考資料:
PageHelper官方文檔PageHelper分頁查詢結(jié)果后再對數(shù)據(jù)List操作的方法
到此這篇關(guān)于Java中PageHelper分頁后對list操作導(dǎo)致分頁無效的文章就介紹到這了,更多相關(guān)Java PageHelper分頁無效內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. .NET6打包部署到Windows Service的全過程2. 解析原生JS getComputedStyle3. ASP 連接Access數(shù)據(jù)庫的登陸系統(tǒng)4. Jsp中request的3個基礎(chǔ)實踐5. 詳解瀏覽器的緩存機(jī)制6. jsp EL表達(dá)式詳解7. jsp實現(xiàn)textarea中的文字保存換行空格存到數(shù)據(jù)庫的方法8. IE6/IE7/IE8/IE9中tbody的innerHTML不能賦值的完美解決方案9. 詳解CSS偽元素的妙用單標(biāo)簽之美10. 詳解JSP 內(nèi)置對象request常見用法
