TK-MyBatis 分页查询「建议收藏」

TK-MyBatis 分页查询「建议收藏」记tkMybatis查询出一个 List集合该集合已经做好了一层分页Page封装即查询出的list使用类型判断instanceofPage为true但是,中途不明白这是一个带分页的集合,把查询出的结果集又做了一层封装需要返回的对象类型为GoodsCategoryDTO,代码如下:   //商品集合        List<GoodsCategory…

大家好,又见面了,我是你们的朋友全栈君。

记 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");
         }
    }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137467.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA JVM 优化「建议收藏」

    JAVA JVM 优化「建议收藏」现在多核CPU是主流。利用多核技术,可以有效发挥硬件的能力,提升吞吐量,对于Java程序,可以实现并发垃圾收集。但是Java利用多核技术也带来了一些问题,主要是多线程共享内存引起了。目前内存和CPU之间的带宽是一个主要瓶颈,每个核可以独享一部分高速缓存,可以提高性能。JVM是利用操作系统的”轻量级进程”实现线程,所以线程每操作一次共享内存,都无法在高速缓存中命中,是一次开销较大的

    2022年5月26日
    37
  • php getrealpath,java_java 获取路径的各种方法(总结),(1)、request.getRealPath(“/”);//不推 – phpStudy…

    php getrealpath,java_java 获取路径的各种方法(总结),(1)、request.getRealPath(“/”);//不推 – phpStudy…java获取路径的各种方法(总结)(1)、request.getRealPath(“/”);//不推荐使用获取工程的根路径(2)、request.getRealPath(request.getRequestURI());//获取jsp的路径,这个方法比较好用,可以直接在servlet和jsp中使用(3)、request.getSession().getServletContext().getRe…

    2022年9月19日
    0
  • 怎样选择一个好的虚拟主机

    怎样选择一个好的虚拟主机

    2021年9月22日
    43
  • J2ME开发的一般步骤

    J2ME开发的一般步骤最近一段时间发现身边有一本买了一年多的J2ME的书没看,于是抱起来大概看了一下,我的E72是Symbian系统,支持J2ME,所以做了几个简单的小玩意。在学习J2ME开发的过程中有一些简单的心得和体会,现在写下来备忘,如果有朋友也正在学习J2ME开发,觉得有帮助的话,那是最好不过的事情了。 1.开发环境安装配置 目前开发J2ME应用的环境有多种,有基于NetBean的,不过仍以Eclipse为

    2022年7月11日
    21
  • PetShop4架构设计分析(三,四)

    PetShop4架构设计分析(三,四) petshop4.0详解之三(PetShop数据访问层之消息处理)三、PetShop数据访问层之消息处理在进行系统设计时,除了对安全、事务等问题给与足够的重视外,性能也是一个不可避免的问题所在,尤其是一个B/S结构的软件系统,必须充分地考虑访问量、数据流量、服务器负荷的问题。解决性能的瓶颈,除了对硬件系统进行升级外,软件设计的合理性尤为重要。在前面我曾提到,分层式结构设计可能会在一定

    2022年10月16日
    0
  • ViewPager基本用法

    ViewPager基本用法step1:在layout中定义一个ViewPager组件。step2:在Activity中获取ViewPager的引用。step3:为ViewPager设置适配器,step4:为ViewPa

    2022年7月4日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号