错误的分页写法及修改

2023-11-20

一.错误的写法

api:

@GetMapping("/groupList")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "current", value = "页码", required = true, dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(name = "pageSize", value = "每页大小", required = true, dataType = "Long", dataTypeClass = Long.class),
            @ApiImplicitParam(name = "id", value = "店铺ID", required = true, dataType = "Long", dataTypeClass = Long.class)
    })
    @ApiOperation(value = "小组列表", tags = "9.11.27")
    public BaseResult<PageList<ResLineGroupDTO>> groupList (
            @RequestParam("current") Long current, @RequestParam("pageSize") Long pageSize,
            @RequestParam("id")Long shopId){

        return BaseResult.success(businessShopService.groupList(current,pageSize,shopId));
    }

service:

    /**
     * 根据店铺ID获取对应的小组列表
     *
     * @param shopId 店铺ID
     */
    PageList<ResLineGroupDTO> groupList (Long current,Long pageSize,Long shopId);

实现的方法:

@Override
    public PageList<ResLineGroupDTO> groupList(Long current,Long pageSize,Long shopId) {

        PageList<ResLineGroupDTO> page = new PageList<>();
        page.setPage(current);
        page.setPageSize(pageSize);

        Integer pageStart = (current.intValue() - 1) * pageSize.intValue();

        List<ResLineGroupDTO> resultList = new ArrayList<ResLineGroupDTO>();

        //查询店铺的信息
        BusinessLineShopRelevance shop = this.getBaseMapper().selectById(shopId);

        if(Objects.isNull(shop)){
            throw new BizException("该店铺不存在");
        }
        if(shop.getPrivateSphereFlag()==1 || shop.getType()==2){
            //私域 拿的是 clickhouse private_sphere_group表中的数据
            resultList = biGuiderBoardMapper.getPrivateSphereGuiderGroupList(pageStart,pageSize,shop.getBusinessUnitId());
            //查询私域小组组长
            List<ResShoppingGuideDTO> leaderList = biGuiderBoardMapper.getPrivateSphereGuiderLeaderList();
            if(!leaderList.isEmpty()&&leaderList.size()>0){
                Map<Long, ResShoppingGuideDTO> leaderMap = leaderList.stream().collect(Collectors.toMap(ResShoppingGuideDTO::getGroupId, ResShoppingGuideDTO -> ResShoppingGuideDTO, (k1, k2) -> k2));
                //装配负责人信息
                if(!leaderMap.isEmpty()){
                    for(ResLineGroupDTO dto:resultList){
                        if(leaderMap.containsKey(dto.getId())){
                            ResShoppingGuideDTO dto2 = leaderMap.get(dto.getId());
                            ResPrincipalDTO dto1 = new ResPrincipalDTO(dto2.getId(),dto2.getGuiderEmployeeName());
                            List<ResPrincipalDTO> dtos = new ArrayList<>();
                            dtos.add(dto1);
                            dto.setPrincipalList(dtos);
                        }
                    }
                }
            }

        }else {
            //非私域
            resultList= businessLineGroupMapper.getGroupDetail(pageStart,pageSize,shopId);
            //查询负责人
            List<BusinessPrincipalList> principallist =businessPrincipalListMapper.getGroupPricipalListByShopId(shopId);

            if(!principallist.isEmpty()&&principallist.size()>0){
                Map<Long, List<BusinessPrincipalList>> principalmap = principallist.stream().collect(Collectors.groupingBy(BusinessPrincipalList::getBusinessId));
                if(!principalmap.isEmpty()){
                    for(ResLineGroupDTO dto:resultList){

                        if(principalmap.containsKey(dto.getId())){
                            List<ResPrincipalDTO> dtos = new ArrayList<>();
                            List<BusinessPrincipalList> principalLists = principalmap.get(dto.getId());

                            principalLists.forEach(it->{
                                ResPrincipalDTO dto1 = new ResPrincipalDTO();

                                dto1.setId(it.getEmployeeId());
                                dto1.setName(it.getName());

                                dtos.add(dto1);

                            });


                            dto.setPrincipalList(dtos);
                        }



                    }
                }
            }

        }
        for(ResLineGroupDTO dto:resultList){
            dto.setShopName(shop.getName());
        }

        page.setData(resultList);
        page.setTotal((long)resultList.size());

        return page;
    }

mapper接口:

List<ResLineGroupDTO> getGroupDetail(Integer pageStart,Long pageSize,Long shopId);

xml:

<select id="getGroupDetail" resultType="com.huimei.bi.service.business_line.pojo.dto.response.ResLineGroupDTO">
        select gro.*, ifnull(gui.guider_count,0) as guider_count from hmcdata.bi_business_line_group gro
        left join (select group_id , count(1) as guider_count from hmcdata.bi_business_shopping_guide)gui
        on gro.id=gui.group_id
        <if test="shopId != null and shopId != ''">
            WHERE gro.shop_id=#{shopId}
        </if>
        LIMIT #{pageStart},#{pageSize}
    </select>

二.错误点

上面的写法查询出来的总数永远=pageSize,与符合查询条件的总数不符,使用mybatis-plus框架的方法:mapper方法中需要传入一个分页的对象 Ipage ,mapper方法返回也是一个分页对象Page,就能自动实现分页(具体原因、底层逻辑待后续研究)。不使用自定义的sql,就可以直接用BaseMapper自带的selectPage方法就可以。

三.修改后的代码

xml

 <select id="getGroupDetail" resultType="com.huimei.bi.service.business_line.pojo.dto.response.ResLineGroupDTO">
        select gro.*, ifnull(gui.guider_count,0) as guider_count from hmcdata.bi_business_line_group gro
        left join (select group_id , count(1) as guider_count from hmcdata.bi_business_shopping_guide)gui
        on gro.id=gui.group_id
        <if test="shopId != null and shopId != ''">
            WHERE gro.shop_id=#{shopId}
        </if>
    </select>

mapper:

Page<ResLineGroupDTO> getGroupDetail(IPage<ResLineGroupDTO> page, Long pageSize, Long shopId);

业务实现方法:

@Override
    public PageList<ResLineGroupDTO> groupList(Long current,Long pageSize,Long shopId) {

        Page<ResLineGroupDTO> page = new Page<>(current, pageSize);

        Page<ResLineGroupDTO> privateSphereGuiderGroupList=new Page<>();


        /*Integer pageStart = (current.intValue() - 1) * pageSize.intValue();*/

        List<ResLineGroupDTO> resultList = new ArrayList<ResLineGroupDTO>();

        //查询店铺的信息
        BusinessLineShopRelevance shop = this.getBaseMapper().selectById(shopId);

        if(Objects.isNull(shop)){
            throw new BizException("该店铺不存在");
        }
        if(shop.getPrivateSphereFlag()==1 || shop.getType()==2){
            //私域 拿的是 clickhouse private_sphere_group表中的数据
            privateSphereGuiderGroupList = biGuiderBoardMapper.getPrivateSphereGuiderGroupList(page, pageSize, shop.getBusinessUnitId());
            resultList =privateSphereGuiderGroupList.getRecords();
            //查询私域小组组长
            List<ResShoppingGuideDTO> leaderList = biGuiderBoardMapper.getPrivateSphereGuiderLeaderList();
            if(!leaderList.isEmpty()&&leaderList.size()>0){
                Map<Long, ResShoppingGuideDTO> leaderMap = leaderList.stream().collect(Collectors.toMap(ResShoppingGuideDTO::getGroupId, ResShoppingGuideDTO -> ResShoppingGuideDTO, (k1, k2) -> k2));
                //装配负责人信息
                if(!leaderMap.isEmpty()){
                    for(ResLineGroupDTO dto:resultList){
                        if(leaderMap.containsKey(dto.getId())){
                            ResShoppingGuideDTO dto2 = leaderMap.get(dto.getId());
                            ResPrincipalDTO dto1 = new ResPrincipalDTO(dto2.getId(),dto2.getGuiderEmployeeName());
                            List<ResPrincipalDTO> dtos = new ArrayList<>();
                            dtos.add(dto1);
                            dto.setPrincipalList(dtos);
                        }
                    }
                }
            }

        }else {
            //非私域
            privateSphereGuiderGroupList = businessLineGroupMapper.getGroupDetail(page, pageSize, shopId);
            resultList=privateSphereGuiderGroupList.getRecords();
            //查询负责人
            List<BusinessPrincipalList> principallist =businessPrincipalListMapper.getGroupPricipalListByShopId(shopId);

            if(!principallist.isEmpty()&&principallist.size()>0){
                Map<Long, List<BusinessPrincipalList>> principalmap = principallist.stream().collect(Collectors.groupingBy(BusinessPrincipalList::getBusinessId));
                if(!principalmap.isEmpty()){
                    for(ResLineGroupDTO dto:resultList){

                        if(principalmap.containsKey(dto.getId())){
                            List<ResPrincipalDTO> dtos = new ArrayList<>();
                            List<BusinessPrincipalList> principalLists = principalmap.get(dto.getId());

                            principalLists.forEach(it->{
                                ResPrincipalDTO dto1 = new ResPrincipalDTO();

                                dto1.setId(it.getEmployeeId());
                                dto1.setName(it.getName());

                                dtos.add(dto1);

                            });


                            dto.setPrincipalList(dtos);
                        }



                    }
                }
            }

        }
        for(ResLineGroupDTO dto:resultList){
            dto.setShopName(shop.getName());
        }

        privateSphereGuiderGroupList.setRecords(resultList);

        return new PageList<>(privateSphereGuiderGroupList);

    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误的分页写法及修改 的相关文章

随机推荐

  • 3.git 将本地仓库推到远程

    1 创建一个本地仓库 git init 2 把文件添加到版本仓库中 git add 3 生成提交记录 git commit m git init 4 关联到远程库 git remote add origin 你的远程库 5 获取远程库与本地
  • jsoncpp封装和解析字符串、数字、布尔值和数组

    使用jsoncpp进行字符串 数字 布尔值和数组的封装与解析 1 下载jsoncpp的代码库 百度网盘地址 http pan baidu com s 1ntqQhIT 2 解压缩文件 jsoncpp rar unzip jsoncpp ra
  • 解决BeanNotOfRequiredTypeException办法(@Autowired和@Resource注解的不同)

    1 错误信息 org springframework beans factory BeanNotOfRequiredTypeException Bean named aisleService must be of type com gdie
  • Nmap源码分析(主机发现)

    Nmap源码分析 主机发现 2012年8月9日 Nmap在进行真正的端口扫描之前 通常需要确定目标主机是否在线 主机发现过程 以免发送大量探测包到不在线的主机 主机发现作为Nmap的基本功能之一 用户也可以单独运用 例如 仅仅需要确定局域网
  • 盘点3款超好用的免费录屏软件,快来看!

    在现代数字化社会中 录屏软件成为了各行各业中必备的工具之一 用于记录操作步骤 制作教程 分享游戏精彩瞬间等 而寻找一款免费的 功能强大的录屏软件也变得越来越重要 本文将为您介绍3款免费录屏软件 并详细说明使用步骤 帮助您找到适合自己需求的录
  • 制作OLED图标

    制作OLED图标 陈拓 2021 06 24 2021 06 26 1 概述 制作用于OLED显示的图标 获取C语言图像点阵数据 2 图标库 先准备图标图像 可以从图标库中找需要的图案 下面两个是我常用的图标网站 2 1 Font Awes
  • 什么是gdb,gdb的简单用法

    在Linux中 gdb是GNU调试器 GNU debugger 的缩写 它是一个强大的命令行调试工具 用于调试C C 和其他编程语言的程序 使用gdb可以执行以下任务 启动程序并逐行执行代码 设置断点 以便在特定位置停止程序执行 检查变量的
  • php漏洞eval,Web安全之代码执行漏洞

    原标题 Web安全之代码执行漏洞 内容 1 代码执行漏洞的概述 2 代码执行漏洞的危害 3 代码执行漏洞的利用 4 代码执行漏洞的防御 背景介绍 在Web应用中有时候程序员为了考虑灵活性 简洁性 会在代码调用eval函数 PHP函数 去处理
  • oracle imp lrm 00101,LRM-00101: unknown parameter name解决办法

    LRM 00101 unknown parameter name解决方法 点击右边红色标题查看本文完整版 LRM 00101 unknown parameter name解决方法 SQL gt startup pfile d oracle
  • 2023华为od机试 Python【比赛冠军】

    题目 我们现在有若干个运动员 每个运动员有自己独特的id 每个运动员的能力不同 比赛按照如下规则进行 0号和1号 2号和3号 以此类推 在每一轮比赛中 获胜的进入下轮 输入描述 输入一行N个数字代表N的运动员的实力值 输出冠亚季军的id 用
  • 逻辑思维训练题

    1 估算你所在城市理发店的数量 https www jianshu com p 1431daad2c62 这种思维方式的核心 就是把你要探索的结果用一个数理公式展示出来 我们用最开始的煎饼摊例子来看怎么算 就要用到 利润 收入 变动成本 而
  • 用于包管理的基本命令APT-GET和APT-CACHE

    这篇文章解释你如何快速学习从命令行使用apt get和apt cache安装 移除 升级和搜索软件包 这篇文章提供一些有用命令 它们将帮助你在基于Debian Ubuntu的系统中处理包管理 apt get是什么 apt get工具是一个强
  • Flutter基础Dart单例的实现

    引言 在日常开发搭建基础框架时 常常用到全局使用的数据类或者工具类 比如日期工具类 地图工具类等 在项目一般使用几种单例类来分享心得 有类实例方式 工厂方式以及类静态方式 实例方式 使用DartPad cn网站来练习dart简单代码片段还是
  • [QT编程系列-40]:QML语言简介

    目录 第1章 简介 第2章 QT QML示例 第三章 QML的步骤 第1章 简介 QML Qt Meta Object Language 是Qt框架中用于构建用户界面的声明性语言 它是一个轻量级的语言 用于描述界面的结构和行为 使开发人员能
  • 樱花动漫中的视频下载分析

    昨天有个朋友问我樱花动漫中的视频怎么下载 那么今天我就写篇文章来专门分析下樱花动漫中的视频是怎么下载的 1 还是打开我们的马赛克视频助手 来分析樱花动漫的数据包 当然你们也没有用其他的抓包工具 不过我习惯了用这个 可以使用它的转到来源功能
  • EPI distortion correction形变矫正, eddy, fieldmap等五种不同方法

    EPI distortion correction形变矫正 1 topup eddy 2 fieldmap eddy 2 1 对mag做去脑壳 2 2 基于去过脑壳的mag 1volume bet nii gz数据 对fieldmap进行预
  • STM32 FLASH操作

    STM32 的闪存模块由 主存储器 信息块和闪存存储器接口寄存器等 3 部分组成 主存储器 该部分用来存放代码和数据常数 如 const 类型的数据 对于大容量产品 其被划分为 256 页 每页 2K 字节 注意 小容量和中容量产品则每页只
  • 解决iframe在ios中无法滚动的bug

    在解决iframe在ios无法滚动的bug中 需要在iframe外面包裹一层div 如下 div class scroll wrapper div 然后设置scroll wrapper的样式 给scroll wrapper添加 webkit
  • camunda 流程引擎如何开始并行任务,且有哪些实现方式?

    认识并行任务 在流程引擎开发中 稍微复杂一点的项目都会遇到并行任务 什么是并行任务呢 就是在完成一个流程节点后 下一步会同时开始多个任务 且任务与任务之间互不影响 这个说起来真的有点绕 刚开始我真不理解 试了好多次才想明白 下面就画2条不同
  • 错误的分页写法及修改

    一 错误的写法 api GetMapping groupList ApiImplicitParams ApiImplicitParam name current value 页码 required true dataType Long da