day_1_15 JavaWeb实现分页查询

首先先看效果图:


分页查询.png

然后提供了一个Java Bean实体类对象
(PageBean.java)

import java.util.List;

/**
 * 封装了 分页查询的所有参数
 *
 */
public class PageBean<T> {
    private Integer cp; // 当前页
    private Integer tp; // 总页数
    private Integer tr; // 总记录数
    private Integer pr; // 每页记录数为5
    private List<T> list; // 每页数据

    public Integer getCp() {
        return cp;
    }

    public void setCp(Integer cp) {
        this.cp = cp;
    }

    // 得到总页数
    public Integer getTp() {
        int count = tr / pr;
        return (tr % pr == 0) ? count : count + 1;
    }

    public Integer getTr() {
        return tr;
    }

    public void setTr(Integer tr) {
        this.tr = tr;
    }

    public Integer getPr() {
        return pr;
    }

    public void setPr(Integer pr) {
        this.pr = pr;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }
}

在dao层提供对数据库的操作:()

     /**
     * 查询所有用户
     *
     * @return 返回封装了所有客户的list集合
     * @throws Exception
     */
    public PageBean<Customer> findAllCustomer(PageBean pageBean) throws Exception {
        String sql = "select * from customer limit ?, ?";
        Object[] objs = {(pageBean.getCp() - 1) * pageBean.getPr(),
                pageBean.getPr()}; // 第一个参数为 5 * (当前页数 - 1); 后一个参数为5(每页的记录数)
        List<Customer> list = qr.query(sql, new BeanListHandler<Customer>(Customer.class), objs);
        pageBean.setList(list);

        // 查询总记录数
        sql = "select count(*) from customer";
        Number n = (Number) qr.query(sql, new ScalarHandler());
        Integer tr = n.intValue();
        pageBean.setTr(tr);

        return pageBean;
    }

然后是页面的展示:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>客户列表</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">

</head>

<body>
<h3 align="center">客户列表</h3>

<table border="1" width="70%" align="center">
    <tr>
        <th>客户姓名</th>
        <th>性别</th>
        <th>生日</th>
        <th>手机</th>
        <th>邮箱</th>
        <th>描述</th>
        <th>操作</th>
    </tr>

    <c:forEach var="customer" items="${requestScope.pageBean.list }">
        <input type="hidden" value="${customer.cid }" id="cid"/>
        <input type="hidden" value="${customer.cname }" id="cname">

        <tr>
            <td>${customer.cname }</td>
            <td>${customer.gender }</td>
            <td>${customer.birthday }</td>
            <td>${customer.cellPhone }</td>
            <td>${customer.email }</td>
            <td>${customer.description }</td>
            <td>
                <a href="${pageContext.request.contextPath }/CustomerServlet?method=findCustomerById&cid=${customer.cid}">编辑</a>
                <a href="javascript:_delete('${customer.cid }')">删除</a>
            </td>
        </tr>
    </c:forEach>
</table>

<center style="font-size:2em;">
    第${pageBean.cp }页/共${pageBean.tp }页

    <a href="${pageContext.request.contextPath }/CustomerServlet?method=findAllCustomer&cp=1"/>首页</a>

    <%--如果当前页为1  那么 不能够再上一页 --%>
    <c:choose>
        <c:when test="${pageBean.cp>1 }">
            <a href="${pageContext.request.contextPath }/CustomerServlet?method=findAllCustomer&cp=${pageBean.cp-1}"/>上一页</a>
        </c:when>
        <c:otherwise>
            上一页
        </c:otherwise>
    </c:choose>

    <%-- 如果总页数小于10 那么第一个数字为1, 最后一个数字为总页数 --%>
    <c:if test="${pageBean.tp<=10 }">
        <c:set var="begin" value="1"/>
        <c:set var="end" value="${pageBean.tp }"/>
    </c:if>

    <%--
        如果总页数大于10, 那么第一个数字为cp-5, 最后一个数字为cp+4
     --%>
    <c:if test="${pageBean.tp>10 }">
        <c:set var="begin" value="${pageBean.cp-5 }"/>
        <c:set var="end" value="${pageBean.cp+4 }"/>

        <c:if test="${begin<1 }">
            <c:set var="begin" value="1"/>
            <c:set var="end" value="10"/>
        </c:if>
        <c:if test="${end>pageBean.tp }">
            <c:set var="begin" value="${pageBean.tp-9}"/>
            <c:set var="end" value="${pageBean.tp }"/>
        </c:if>
    </c:if>

    <c:forEach begin="${begin }" end="${end }" var="i">
        <c:choose>
            <c:when test="${pageBean.cp eq i }">
                ${i}
            </c:when>
            <c:otherwise>
                <a href="${pageContext.request.contextPath }/CustomerServlet?method=findAllCustomer&cp=${i}">${i}</a>
            </c:otherwise>
        </c:choose>
    </c:forEach>

    <%-- 如果当前页等于总页数, 那么不能再下一页 --%>
    <c:choose>
        <c:when test="${pageBean.cp < pageBean.tp }">
            <a href="${pageContext.request.contextPath }/CustomerServlet?method=findAllCustomer&cp=${pageBean.cp+1}"/>下一页</a>
        </c:when>
        <c:otherwise>
            下一页
        </c:otherwise>
    </c:choose>

    <a href="${pageContext.request.contextPath }/CustomerServlet?method=findAllCustomer&cp=${pageBean.tp}"/>尾页</a>
</center>

<script type="text/javascript">
    function _delete(cid) {
        var flag = window.confirm("确认要删除吗 !!!");
        if (flag == true) {
            location.href = "${pageContext.request.contextPath}/CustomerServlet?method=deleteCustomerById&cid=" + cid;
        }
    }
</script>

</body>
</html>

结果演示:


演示.gif
完整代码地址(含SQL脚本)

https://github.com/menglanyingfei/Java/tree/master/JavaWebTrain/day_1_15/customer

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容