分页的实现

1.domain层

PageInfo.java

package com.csi.domain;

import java.io.Serializable;
import java.util.List;

public class PageInfo<T> implements Serializable {
    //装在分页数据
    private List<T> list;
    //当前页
    private int currentPage;
    //总页数
    private int totalPage;
    //每页
    private int perPage;
    //总记录数
    private int totalRecords;

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

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

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public int getPerPage() {
        return perPage;
    }

    public void setPerPage(int perPage) {
        this.perPage = perPage;
    }

    public int getTotalRecords() {
        return totalRecords;
    }

    /**
     * 计算总页数
     * @param totalRecords
     */
    public void setTotalRecords(int totalRecords) {
        this.totalRecords = totalRecords;
        int num = totalRecords % perPage == 0 ? totalRecords / perPage : (totalRecords / perPage) +1;
        setTotalPage(num);
    }

    /**
     * 计算上一页
     * @return
     */
    public int getPreviewPage(){
        return currentPage <= 1 ? 1 : currentPage-1;
    }

    /**
     * 计算下一页
     * @return
     */
    public int getNextPage(){
        return currentPage >= totalPage ? totalPage :currentPage+1;
    }
}

 2.dao层

StudentDao.java

package com.csi.dao;

import com.csi.domain.PageInfo;
import com.csi.domain.Student;

import java.sql.SQLException;
import java.util.List;

public interface StudentDao {
    PageInfo<Student> list(PageInfo pageInfo) throws SQLException;
}

3.daoImpl

StudentDaoImpl

package com.csi.dao.impl;

import com.csi.dao.StudentDao;
import com.csi.domain.PageInfo;
import com.csi.domain.Student;
import com.csi.utils.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class StudentDaoImpl extends JDBCUtils implements StudentDao {
    @Override
    public PageInfo<Student> list(PageInfo pageInfo) throws SQLException {
        String sql = "SELECT * FROM student LIMIT ?,?";
        Connection connection = this.getConnection();
        PreparedStatement ps = connection.prepareStatement(sql);
        ps.setInt(1,(pageInfo.getCurrentPage()-1) * pageInfo.getPerPage());
        ps.setInt(2,pageInfo.getPerPage());
        ResultSet rs = ps.executeQuery();
        List<Student> students =new ArrayList<>();
        Student student =null;
        while (rs.next()){
            student =new Student();
            student.setId(rs.getInt("id"));
            student.setName(rs.getString("name"));
            student.setTelephone(rs.getString("tel"));
            students.add(student);
            pageInfo.setList(students);
        }
        //计算总记录数
        sql = "SELECT COUNT(*) FROM student";
        ps = connection.prepareStatement(sql);
        rs = ps.executeQuery();
        int ret =0;
        if (rs.next()){
            ret = rs.getInt(1);
        }
        pageInfo.setTotalRecords(ret);
        this.release(ps,connection,rs);
        return pageInfo;
    }
}

4.controller层

ListController.java

package com.csi.controller;

import com.csi.dao.StudentDao;
import com.csi.dao.impl.StudentDaoImpl;
import com.csi.domain.PageInfo;
import com.csi.domain.Student;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;

@WebServlet("/ListController")
public class ListController extends HttpServlet {
    @Override
    /**
     * 分页
     */
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码格式
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        String cno=req.getParameter("currentPage");
        int currentPage = 1;
        if (cno!=null){
            currentPage = Integer.valueOf(cno);
        }
        PageInfo<Student>pageInfo =new PageInfo<>();
        pageInfo.setCurrentPage(currentPage);
        pageInfo.setPerPage(2);
        StudentDao studentDao =new StudentDaoImpl();
        try {
           pageInfo =  studentDao.list(pageInfo);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        req.setAttribute("pageInfo",pageInfo);
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }
}

index.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
          integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">

    <script src="http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"
            integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous">
    </script>

    <script type="text/javascript">
        $(function () {
            alert(123)
            alert(${pageInfo.list})
        })
    </script>
</head>
<body>
<div class="container">
    <div class="row">
        <table>
            <c:forEach var="student" items="${pageInfo.list}">
            <tr>
                <td>${student.id}</td>
                <td>${student.name}</td>
                <td>${student.telephone}</td>
            </tr>
            </c:forEach>
        </table>
        <a href="/ListController?currentPage=${pageInfo.getPreviewPage()}">上一页</a>
        ${pageInfo.totalRecords}
        <c:forEach var="i" begin="1" end="${pageInfo.totalPage}" step="1">
        <a href="/ListController?currentPage=${i}">${i}</a>
        </c:forEach>
        <a href="/ListController?currentPage=${pageInfo.getNextPage()}">下一页</a>
    </div>
</div>

</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值