最近在項目中,經常碰到這樣的情況,就是說前台需要page對象,但是我后台page查詢出來的數據(entity類)並不是前台需要的數據(dto),還需要二次封裝,前台要page對象啊,習慣了用工具類,咋自己封裝一個page對象哦?
所有就有了這篇文章,實際上思路都是一樣的,就是我返回的數據肯定是個Page對象,我查出來的數據要么是Page,要么是List,是page就getContent一下獲取到List,然后再由List轉為page對象;
我自己找到的方法:
首先要有分頁必備的Pageable:
Pageable pageable = new PageRequest(currentPage - 1, pageSize);
然后就是主體了:
private Page<SsoUserInfo> getPageSsoUserInfo(Pageable pageable, List<SsoUserInfo> userInfosList) { if (pageable.getOffset() > userInfosList.size()) { long total = 0l; PageImpl<SsoUserInfo> emptyPage = new PageImpl<>(Lists.newArrayList(), pageable, total); return emptyPage; } if (pageable.getOffset() <= userInfosList.size() && pageable.getOffset() + pageable.getPageSize() > userInfosList.size()) { List<SsoUserInfo> ssoUserInfos = userInfosList.subList((int) pageable.getOffset(), userInfosList.size()); PageImpl<SsoUserInfo> ssoUserInfoPage = new PageImpl<>(ssoUserInfos, pageable, userInfosList.size()); return ssoUserInfoPage; } List<SsoUserInfo> ssoUserInfos = userInfosList.subList((int) pageable.getOffset(), (int) (pageable.getOffset() + pageable.getPageSize())); PageImpl<SsoUserInfo> ssoUserInfoPage = new PageImpl<>(ssoUserInfos, pageable, userInfosList.size()); return ssoUserInfoPage; }
之所以會寫這篇文章,因為我今天翻代碼的時候,發現了我同事寫的同樣作用的代碼:
Pageable pageable = new PageRequest(formBean.getCurrentPage() - 1, formBean.getPageSize(), sort); Page<CmsContent> page = contentDao.findAll(specification, pageable); List<ContentDto> list = new ArrayList<>(); for (CmsContent cmsContent : page.getContent()) { ContentDto text = dtoByContent(cmsContent); list.add(text); } return new PageImpl<ContentDto>(list, page.getPageable(), page.getTotalElements());
mmp!還是見識少啊,但是看了下源碼,覺得官方文檔真的是個好東西啊