TK-MyBatis 分頁(yè)查詢的具體使用
記 tkMybatis 查詢出一個(gè) ?List集合 該集合已經(jīng)做好了一層分頁(yè)P(yáng)age封裝 即查詢出的list 使用類型判斷 instanceof Page 為true
但是,中途不明白這是一個(gè)帶分頁(yè)的集合,把查詢出的結(jié)果集又做了一層封裝 需要返回的對(duì)象類型為GoodsCategoryDTO,代碼如下:?
// 商品集合
List<GoodsCategoryDTO> goodsCategorys = goodsLists.stream().map(x->{
GoodsCategoryDTO goodsDTO = new GoodsCategoryDTO();
goodsDTO.setGoodsId(x.getGoodsId());
// 價(jià)格,名字
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;
從字面意思上理解 沒有問題 返回一個(gè)需要出里商品的集合 在controller里面做分頁(yè)的時(shí)候new 一個(gè)PageInfo 把該集合傳入 代碼如下:
PageHelper.startPage(goodsParam.getPage(), goodsParam.getSize()); // 設(shè)置分頁(yè)值
// 返回值
List<GoodsCategoryDTO> goodsCategoryDTO = goodsService.getGoodsCategoryInfo(goodsParam);
PageInfo<GoodsCategoryDTO> pageInfo = new PageInfo<>(goodsCategoryDTO);
return ResultGenerator.genSuccessResult("返回?cái)?shù)據(jù)成功", pageInfo);
但是萬萬沒有想到,在創(chuàng)建分頁(yè)對(duì)象PageInfo過程中 goodsCategoryDTO這個(gè)集合來判斷分頁(yè)形式,然后根據(jù)page 獲取當(dāng)前頁(yè)pageNum和pageSize和pageTotal,但是如果goodsCategoryDTO 使用instanceof 判斷一直是Collection 無法分頁(yè)。
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();
//由于結(jié)果是>startRow的,所以實(shí)際的需要+1
if (this.size == 0) {
this.startRow = 0;
this.endRow = 0;
} else {
this.startRow = page.getStartRow() + 1;
//計(jì)算實(shí)際的endRow(最后一頁(yè)的時(shí)候特殊)
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;
//計(jì)算導(dǎo)航頁(yè)
calcNavigatepageNums();
//計(jì)算前后頁(yè),第一頁(yè),最后一頁(yè)
calcPage();
//判斷頁(yè)面邊界
judgePageBoudary();
}
}
想了一下 使用如下的解決辦法可能會(huì)好一點(diǎn) 直接new 一個(gè)新的Page對(duì)象 獲取新的pageNum pageSize Total 然后賦值給該對(duì)象 ,然后遍歷集合中g(shù)oodsList 然后做二次封裝 添加到 page集合 最后返回該集合即可。
/**
* 查詢分類商品信息
* @param goodsParam
* @return
*/
public List<GoodsCategoryDTO> getGoodsCategoryInfo (GoodsParam goodsParam){
// 查詢出已經(jīng)實(shí)現(xiàn)和封裝好的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");
}
}
到此這篇關(guān)于TK-MyBatis 分頁(yè)查詢的具體使用的文章就介紹到這了,更多相關(guān)TK-MyBatis 分頁(yè)查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot從0到1整合銀聯(lián)無跳轉(zhuǎn)支付功能附源碼
這篇文章主要介紹了SpringBoot從0到1整合銀聯(lián)無跳轉(zhuǎn)功能支付附源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
如何查看Linux上正在運(yùn)行的所有Java程序列表
在linux操作時(shí),經(jīng)常要查看運(yùn)行的項(xiàng)目的進(jìn)程和端口,下面這篇文章主要給大家介紹了關(guān)于如何查看Linux上正在運(yùn)行的所有Java程序列表的相關(guān)資料,需要的朋友可以參考下2023-10-10
詳解java爬蟲jsoup解析多空格class數(shù)據(jù)
在本篇內(nèi)容中小編給大家分享了java爬蟲jsoup怎么解析多空格class數(shù)據(jù)的方法和技巧,需要的朋友們跟著學(xué)習(xí)下。2018-12-12
Spring\SpringBoot配置連接數(shù)據(jù)庫(kù)的方法
最近在學(xué)習(xí)SpringBoot,第一步就是要配置數(shù)據(jù)庫(kù),本文詳細(xì)的介紹了Spring\SpringBoot配置連接數(shù)據(jù)庫(kù)的方法,有需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06
Java并發(fā)編程中的volatile關(guān)鍵字詳解
這篇文章主要介紹了Java并發(fā)編程中的volatile關(guān)鍵字詳解,volatile?用于保證我們某個(gè)變量的可見性,使其一直存放在主存中,不被移動(dòng)到某個(gè)線程的私有工作內(nèi)存中,需要的朋友可以參考下2023-08-08

