免连表查询并手动实现PageHelper


项目需求关联了三个表进行查询,并且对查询的结果进行分页。

在项目中有的地方使用了PageHelper进行分页,但写这个没用,这里一定一定要注意!!!在传参的时候要注意不能给语句传PageHelper中已有的参数名(pageNum,pageSize),这是SpringBoot中的一个坑。

下面是查询语句,以及count查询,因为返回结果需要count信息,你查看PageHelper的查询过程就会发现,也是执行了一下count
但是要在同样的条件下查询才会准确。
比如下面的语句中查询了status,那么count语句中同样要带着status进行查询,为了方便我用的map传参,下面会有展示

<select id="list" parameterType="java.util.HashMap" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from invite
        <where>
            <if test="status != null">
                status = #{status,jdbcType=VARCHAR}
            </if>
            <if test="member_id != null">
                and member_id = #{memberId,jdbcType=INTEGER}
            </if>
        </where>
        order by num DESC
        <if test="startNum!= null and pageLength!= null">
            limit #{pageNum},#{pageSize}
        </if>
    </select>
    <select id="selceCount" parameterType="java.util.HashMap" resultType="Integer">
        SELECT COUNT(id) FROM invite
        <where>
            <if test="status != null">
                status = #{status,jdbcType=VARCHAR}
            </if>
            <if test="member_id != null">
                and member_id = #{memberId,jdbcType=INTEGER}
            </if>
        </where>
    </select>

service层
以下是service层的查询,返回一个结构体

public List<InviteVo> list(HashMap map){
		//查询出来后,循环拼到返回体中,返回体中有你要的其他表的信息
        List<InviteEntity> list = inviteEntityMapper.list(map);
        List<InviteVo> voList = new ArrayList<>();
        if (list.size() != 0){
            for (InviteEntity invite : list){
                InviteVo inviteVo = new InviteVo();
                inviteVo.setId(invite.getId());
                inviteVo.setNum(invite.getNum());
                inviteVo.setStatus(invite.getStatus());
                MemberEntity memberEntity = memberService.info(invite.getMemberId());
                inviteVo.setMemberId(memberEntity.getId());
                inviteVo.setMemberName(memberEntity.getName());
                voList.add(inviteVo);
            }
        }
        return voList;
    }

    public Integer count(HashMap map){
    	//总条数统计
        return inviteEntityMapper.selceCount(map);
    }
 @RequestMapping("list")
    public Object list(HttpServletRequest request){
        JSONObject json = new JSONObject();
        String memberId = request.getParameter("memberId");
        String status = request.getParameter("status");
        String pageNum = request.getParameter("pageNum");
        String pageSize = request.getParameter("pageSize");
        //将要用的参数放到map中
        HashMap<String,Object> selectMap = new HashMap<>();
        if (StringUtils.isNotBlank(memberId)){
            selectMap.put("memberId",memberId);
        }
        if (StringUtils.isNotBlank(status)){
            selectMap.put("status",status);
        }
        if (!StringUtils.isNotBlank(pageNum)){
            pageNum = "1";
        }
        if (!StringUtils.isNotBlank(pageSize)){
            pageSize = "15";
        }
        //手动计算startNum
        int startNum = (Integer.valueOf(pageNum)-1)*Integer.valueOf(pageSize);
        //limit后面的两个参数是int类型
        selectMap.put("startNum",Integer.valueOf(pageNum));
        selectMap.put("pageLength",Integer.valueOf(pageSize));
        List<InviteVo> list = inviteService.list(selectMap);
        Integer num = inviteService.count(selectMap);
        Map map = new HashMap();
        //计算totalPage 
        int totalPage = num / Integer.valueOf(pageSize) + ((num % Integer.valueOf(pageSize) == 0) ? 0 : 1);
        //
        map.put("list", list);
        map.put("total", num);
        map.put("pageNum", Integer.valueOf(pageNum));
        map.put("pages", totalPage);
        json.put("success", true);
        json.put("code", 200);
        json.put("msg", "查询成功");
        json.put("data", map);
        return json;
    }

题外话:使用springboot最好引入这个

<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.12</version>
 </dependency>

yml文件中的配置

pagehelper:
 helper-dialect: mysql
 reasonable: true
 support-methods-arguments: true
 params: countSql
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值