SSM框架分页查询

本文详细介绍了如何在SSM(Spring、SpringMVC、MyBatis)框架下实现分页查询。首先通过编写接口和SQL语句获取总记录数,接着配置Service接口及其实现类,将分页参数放入Map中。最后在Controller中调用Service方法,并将结果转发到页面展示。

分页查询

步骤:以查询用户为例:
1.先查询出总记录数:
准备好接口方法:

 int getAllSize();

2.准备好SQL语句:

 <select id="getAllSize" resultType="int">
        select count(*) from user;
    </select>

service接口方法及实现类:

 int getAllSize();

实现类:

  @Override
    public int getAllSize() {
        return mapper.getAllSize();
    }

然后把算好的起点和每页要显示的记录数放入map集合中,然后准备好接口方法:

 public List<User> getAll(Map<String, Integer> map);

SQL语句:参数为键名

<select id="getAll" resultType="user" parameterType="map">
        select * from user limit #{start},#{pageSize}
    </select>

准备好Service接口和实现类:

 public List<User> getAll(Map<String, Integer> map);

实现类:

 @Override
    public List<User> getAll(Map<String, Integer> map) {
        return mapper.getAll(map);
    }

在controller控制器的list方法中调用:

 /**
     *
     * @param model
     * @param nodePage 如果nodePage没有传入值的话,默认值为1
     * @return
     */
 @RequestMapping("/list")
    public String list(Model model,@RequestParam(value = "nodePage",defaultValue = "1") int nodePage){
        //获取数据总记录数:比如10条
        int DataItemSize = userService.getAllSize();
        int allPage = 0; //总页数
        int pageSize = 5;//每页要显示的记录数
        //判断数据总记录和每页要显示的记录数求余,余数是否为0
        if (DataItemSize%pageSize==0){
            allPage=DataItemSize/pageSize;// 10/5=2 总页数=2
        }else{
            allPage=(DataItemSize/pageSize)+1;//如果是13条:13/5=2.5 int类型取2整数,然后在加1就成了3页 总页数=3
        }
        int startIndex = 0;//默认值设置起点为0;
        //select * from user limit 起点,条数
        startIndex = (nodePage-1)*pageSize; //起点=当前页数-1*每页要显示的记录数
        Map<String,Integer> map = new HashMap<String, Integer>(); //把起点和要显示的记录数存入map集合中
        map.put("start",startIndex);
        map.put("pageSize",pageSize);

        model.addAttribute("allpage",allPage);//把总页数传到页面
        model.addAttribute("nodePage",nodePage);//把当前页数传到页面

        List<User> list = userService.getAll(map); //调用查询
        model.addAttribute("users",list);
        return "main";
    }

转发到main.jsp页面:

<div id="all">
    <table border="1px" width="700px">
        <tr>
            <td>序号</td>
            <td>姓名</td>
            <td>密码</td>
            <td>性别</td>
            <td>年龄</td>
            <td>地址</td>
            <td>生日</td>
            <td>头像</td>
            <td>操作</td>
        </tr>
        <c:forEach items="${requestScope.users}" varStatus="i" var="user">
            <tr id="t${user.id}">
                <td>${i.count}</td>
                <td>${user.name}</td>
                <td>${user.password}</td>
                <td>${user.sex}</td>
                <td>${user.age}</td>
                <td>${user.address}</td>
                <td><fmt:formatDate value="${user.birth}" pattern="yyyy年MM月dd日"/></td>
                <td><img src="${pageContext.servletContext.contextPath}/icon/${user.icon}" width="30px"></td>
                    <%--REST风格从页面到controller传递数据--%>
                <td><a href="${pageContext.servletContext.contextPath}/user/update/${user.id}">修改</a>
                    <a href="#" delId="${user.id}" class="deluser">删除</a></td>
            </tr>
        </c:forEach>
    </table>
    <c:if test="${requestScope.nodePage>1}"><%--当前页面不是第一页显示上一页--%>
        <a href="${pageContext.servletContext.contextPath}/user/list?nodePage=${nodePage-1}">上一页</a>
    </c:if>
    <c:forEach begin="1" end="${requestScope.allpage}" var="pagesize">
        <a href="${pageContext.servletContext.contextPath}/user/list?nodePage=${pagesize}">${pagesize}</a>
    </c:forEach>
    <c:if test="${requestScope.nodePage<requestScope.allpage}"><%--当前页面不是最后一页显示下一页--%>
        <a href="${pageContext.servletContext.contextPath}/user/list?nodePage=${nodePage+1}">下一页</a>
    </c:if>
</div>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值