SSM框架实现分页查询基础功能(无前端美化)

分页基础知识:

    公式:limit start,pageSize;

              start: 当前页的起始索引,(偏移量)
              pageSize: 每页多少条
              currentPage: 当前页数

    示例:

查询第一页数据的10条数据:Limit 0,10 
查询第二页数据的10条数据:Limit 10,10
查询第三页数据的10条数据:Limit 20,10
查询第四页数据的10条数据:Limit 30,10

    从上我们可以发现公式中第一个参数start一直在变化,start的计算公式如下:

start=(currentPage-1)*pageSize//(当前第几页-1)*每页显示多少条

    现在我们需要的问题主要几个:
①  计算表记录总数:totalNum
②  根据自定义的pageSize(即每页要显示多少条)和totalNum(表记录总数)
      来计算总页数:totalPage
③  如何获取每一页的起始索引start?这里我们通过jsp页面的每一次点击来更新下一页起始索引。

pojo类:

public class Page {
    private int start; //当前页的起始索引
    private int pageSize; //每页显示多少条
    private int totalNum; //表字段的总记录个数

    //获取总页数:根据表字段中记录总数totalNum 和我们自定义的每页显示多条pageSize 进行计算
    public int getTotalPageNum(int totalNum,int pageSize){
        int totalPage = 0;
        if(totalNum%pageSize!=0){
            totalPage=(totalNum/pageSize)+1;
            return totalPage;
        }
        totalPage=totalNum/pageSize;
        return totalPage;
    }

        //判断是否有前一页
    public boolean isHasPreivousPage(){
        //如果当前位置等于0说明没有前一页
        if(start>0){
            return true;
        }
         return false;
    }

    //获取最后一页第一条数据的起始位置
    public int getLastPageStartLoc(){
        int loc = 0;
        if(totalNum%pageSize==0){/*例如6%3等于0 那么第3页的起始位置是6-3=3 PS:索引从0开始算起*/
            loc=totalNum-pageSize; /*表记录总条数-每页显示多少条*/
        }else if(totalNum%pageSize!=0){/*例如7%3等于1 那么第4页的起始位置是7-(7%3)=7-1=6*/
            loc=totalNum-totalNum%pageSize;
        }
        loc=loc>0?loc:0;/*三元表达式 如果loc<0说明 表记录总条数<每页系那是多少条 所以最后一页就从0开始算计*/
        return loc;

    }

        //判断是否有后一页
    public boolean isHasNextPage(){
        //如果当前页索引>=最后一页第一条的索引,说明没有后一页了。
        if(start>=getLastPageStartLoc()) {
            return false;
        }
        return true;
    }
    //以及 属性的set、get。toString方法  这里不列举
}

orderMapper映射文件:

                                 
                         <!--这里我的实体类属性名和对应数据库字段名不一致所以起了别名-->
 
                                    <!--统计表记录总条数-->
    <select id="getTotalNum" resultType="Integer">
        select count(*)
        from  tb_order;
    </select>

                                  <!--数据库实现分页查询-->
    <select id="selectOrderByPage" resultType="Order" parameterType="Page">
             select  order_id as orderId,
                     d_id  as  dId,
                     order_no  as orderNo,
                     order_Type as orderType,
                     cashier,
                     create_time  as createTime,
                     end_time as   endTime,
                     payment_type as paymentType,
                     price, created, updated
             from tb_order
             order by order_id ASC
             <if test="start!=null and pageSize!=null">
                limit #{start},#{pageSize}
             </if>
    </select>

orderMapper接口:

  int getTotalNum(); //统计表记录总条数
  List<Order>selectOrderByPage(Page page);//实现分页查询

orderServcie接口:

    int getTotalNum(); //统计表记录总条数
    List<Order>selectOrderByPage(Page page);//实现分页查询

orderServcieImpl业务层实现类:

    @Autowired
    OrderMapper orderMapper;
//统计表记录总数
    @Override
    public int getTotalNum() {
        int totalNum = orderMapper.getTotalNum();
        return totalNum;
    }
//实现分页查询
    @Override
    public List<Order> selectOrderByPage(Page page) {
        List<Order> orderListPage = orderMapper.selectOrderByPage(page);
        return orderListPage;
    }

orderController控制层:

    @Autowired
    private OrderService orderService;
    @Autowired
    private DoorService doorService;
    //分页要用的变量
    private Integer totalNum;//存储 表记录总数
    private Integer pageSize =2;//自定义 每页显示两条
    private Integer totalPage;//存储 总共需要多少页
    private Integer start=0;//偏移量:当前页的起始索引
    private Integer lastLoc;//存储最后一页起始索引
    private Page page=new Page();
    //通过分页查询所有
    @RequestMapping("/findAllOrderByPage")
    public String AllorderListByPage(Model model,@RequestParam(name="starts",defaultValue="0") Integer starts){
        totalNum = orderService.getTotalNum();//获取表记录总条数
        page.setTotalNum(totalNum);
        page.setPageSize(pageSize);
        page.setStart(starts);
        lastLoc=page.getLastPageStartLoc();//获取最后一页位置
        totalPage=page.getTotalPageNum(totalNum,pageSize);//获取总页数
        List<Order> list = orderService.selectOrderByPage(page);//分页统计后的列表
        model.addAttribute("page",page);
        model.addAttribute("lastLoc",lastLoc);
        model.addAttribute("totalPage",totalPage);
        model.addAttribute("orderList",list);
        return"orderList";
    }

orderList.jsp页面:
(头文件标签)

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@page isELIgnored="false"%>

显示所有列表部分:</font<

<div>
    <a>新增</a>
    <table border="1" cellspacing="0">
        <%--表头--%>
        <tr align="center" style="font-weight: bold;">
            <td>序号</td>
            <td>订单id</td>
            <td>门店id</td>
            <td>订单号</td>
            <td>订单类型</td>
            <td>收钱员</td>
             <td>开单时间</td>
             <td>结账时间</td>
            <td>支付方式</td>
            <td>支付金额</td>
             <td>创建时间</td>
             <td>修改时间</td>
        </tr>
            <c:forEach items="${orderList}"  var="order" varStatus="i">
                <tr>
                    <td align="center">${i.index+1}</td><%--index是固定的 类似于i++ --%>
                    <td>${order.orderId}</td>
                    <td>${order.dId}</td>
                    <td>${order.orderNo}</td>
                    <td>${order.orderType}</td>
                    <td>${order.cashier}</td>
                    <td><fmt:formatDate value="${order.createTime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
                    <td><fmt:formatDate value="${order.endTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
                    <td>${order.paymentType}</td>
                    <td>${order.price}</td>
                    <td><fmt:formatDate value="${order.created}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
                    <td><fmt:formatDate value="${order.updated}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
                   <td>
                        <a>删除</a>|
                        <a >修改</a>
                    </td>
                </tr>
            </c:forEach>
    </table>
</div>

实现分页查询部分:

<hr/>
<c:choose><%--首页--%>
    <c:when test="${page.start!=0}">
        <span> <a href="/findAllOrderByPage?starts=0"/>首页</a> </span>
    </c:when>
    <c:otherwise>
        <span>首页</span>
    </c:otherwise>
</c:choose>
&nbsp;|
<c:choose><%--上一页--%>
    <c:when test="${page.isHasPreivousPage()==true}">
        <span> <a href="/findAllOrderByPage?starts=${page.start-page.pageSize}"/>上一页</a> </span>
    </c:when>
    <c:otherwise>
        <span>上一页</span>
    </c:otherwise>
</c:choose>
&nbsp;|
<c:choose><%--下一页--%>
    <c:when test="${page.isHasNextPage()==true}">
        <span> <a href="/findAllOrderByPage?starts=${page.start+page.pageSize}"/>下一页</a> </span>
    </c:when>
    <c:otherwise>
        <span>下一页</span>
    </c:otherwise>
</c:choose>
&nbsp;|
<c:choose><%--尾页--%>
    <c:when test="${page.start!=page.getLastPageStartLoc()}">
        <span> <a href="/findAllOrderByPage?starts=${lastLoc}"/>尾页</a> </span>
    </c:when>
    <c:otherwise>
        <span>尾页</span>
    </c:otherwise>
</c:choose>
&nbsp;|
总页数:<span>${totalPage}</span></p>

参考文章:https://www.jianshu.com/p/d108d0cd9acf

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值