您好,登錄后才能下訂單哦!
本篇內容介紹了“TK-MyBatis分頁查詢怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
記 tkMybatis 查詢出一個 List集合 該集合已經做好了一層分頁Page封裝 即查詢出的list 使用類型判斷 instanceof Page 為true
但是,中途不明白這是一個帶分頁的集合,把查詢出的結果集又做了一層封裝 需要返回的對象類型為GoodsCategoryDTO,代碼如下:
// 商品集合 List<GoodsCategoryDTO> goodsCategorys = goodsLists.stream().map(x->{ GoodsCategoryDTO goodsDTO = new GoodsCategoryDTO(); goodsDTO.setGoodsId(x.getGoodsId()); // 價格,名字 if(x.getPriceInfo().getPriceValue() == null && x.getPriceInfo().getPriceType() == null){ goodsDTO.setOriginalPrice(x.getPriceInfo().getOriginalPrice()); }else { goodsDTO.setOriginalPrice(x.getPriceInfo().getOriginalPrice()); goodsDTO.setPrice(x.getPriceInfo().getPriceValue() == null ? new BigDecimal(""): x.getPriceInfo().getPriceValue()); goodsDTO.setGoodsLable(x.getPriceInfo().getPriceName()); } goodsDTO.setTitle(x.getGoodsName()); goodsDTO.setSubTitle(x.getGoodsSubname()); goodsDTO.setImg(x.getGoodsImage()); goodsDTO.setSkuId(x.getSkuId()); return goodsDTO; }).collect(Collectors.toList()); return goodsCategorys;
從字面意思上理解 沒有問題 返回一個需要出里商品的集合 在controller里面做分頁的時候new 一個PageInfo 把該集合傳入 代碼如下:
PageHelper.startPage(goodsParam.getPage(), goodsParam.getSize()); // 設置分頁值 // 返回值 List<GoodsCategoryDTO> goodsCategoryDTO = goodsService.getGoodsCategoryInfo(goodsParam); PageInfo<GoodsCategoryDTO> pageInfo = new PageInfo<>(goodsCategoryDTO); return ResultGenerator.genSuccessResult("返回數據成功", pageInfo);
但是萬萬沒有想到,在創建分頁對象PageInfo過程中 goodsCategoryDTO這個集合來判斷分頁形式,然后根據page 獲取當前頁pageNum和pageSize和pageTotal,但是如果goodsCategoryDTO 使用instanceof 判斷一直是Collection 無法分頁。
public PageInfo(List<T> list, int navigatePages) { if (list instanceof Page) { Page page = (Page) list; this.pageNum = page.getPageNum(); this.pageSize = page.getPageSize(); this.pages = page.getPages(); this.list = page; this.size = page.size(); this.total = page.getTotal(); //由于結果是>startRow的,所以實際的需要+1 if (this.size == 0) { this.startRow = 0; this.endRow = 0; } else { this.startRow = page.getStartRow() + 1; //計算實際的endRow(最后一頁的時候特殊) this.endRow = this.startRow - 1 + this.size; } } else if (list instanceof Collection) { this.pageNum = 1; this.pageSize = list.size(); this.pages = this.pageSize > 0 ? 1 : 0; this.list = list; this.size = list.size(); this.total = list.size(); this.startRow = 0; this.endRow = list.size() > 0 ? list.size() - 1 : 0; } if (list instanceof Collection) { this.navigatePages = navigatePages; //計算導航頁 calcNavigatepageNums(); //計算前后頁,第一頁,最后一頁 calcPage(); //判斷頁面邊界 judgePageBoudary(); } }
想了一下 使用如下的解決辦法可能會好一點 直接new 一個新的Page對象 獲取新的pageNum pageSize Total 然后賦值給該對象 ,然后遍歷集合中goodsList 然后做二次封裝 添加到 page集合 最后返回該集合即可。
/** * 查詢分類商品信息 * @param goodsParam * @return */ public List<GoodsCategoryDTO> getGoodsCategoryInfo (GoodsParam goodsParam){ // 查詢出已經實現和封裝好的Page的list List<GoodsDTO> goodsLists = queryGoodsByCat(goodsParam); if (goodsLists instanceof Page<?>) { Page<GoodsDTO> goodsPage = (Page<GoodsDTO>) goodsLists; return new Page<GoodsCategoryDTO>() {{ this.setPageNum(goodsPage.getPageNum()); this.setPageSize(goodsPage.getPageSize()); this.setTotal(goodsPage.getTotal()); this.setPages(goodsPage.getPages()); this.addAll(goodsPage.stream().map(goods -> new GoodsCategoryDTO() {{ this.setGoodsId(goods.getGoodsId()); this.setTitle(goods.getGoodsName()); this.setSubTitle(goods.getGoodsSubname()); this.setImg(goods.getGoodsImage()); this.setSkuId(goods.getSkuId()); if(goods.getPriceInfo().getPriceValue() == null && goods.getPriceInfo().getPriceType() == null){ this.setOriginalPrice(goods.getPriceInfo().getOriginalPrice()); }else { this.setOriginalPrice(goods.getPriceInfo().getOriginalPrice()); this.setPrice(goods.getPriceInfo().getPriceValue() == null ? new BigDecimal(""): goods.getPriceInfo().getPriceValue()); this.setGoodsLable(goods.getPriceInfo().getPriceName()); } }}).collect(Collectors.toList())); }}; } else { throw new IllegalStateException("goods list must be instance of Page"); } }
“TK-MyBatis分頁查詢怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。