1. 首先来建立一个QueryInfo
(封装查询信息)的实体
package cn.itcast.domain;
public class QueryInfo {
private int currentPage = 1;//用户当前页
private int pageSize = 5;//默认一页5条数据
private int startIndex;//记住用户当前看的页的数据在数据库的起始位置
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
//由于startIndex是由currentPage与pageSize计算而得所以没必要有set方法
public int getStartIndex() {
this.startIndex = (this.getCurrentPage() - 1) * this.getPageSize();
return startIndex;
}
}
2. 封装查询结果的QueryResult
的实体(用户访问数据库取出该页数据)
package cn.itcast.domain;
import java.util.List;
public class QueryResult {
private List list;//记住用户看的页的数据
private int totalRecord;//记住总记录数
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
}
3. 封装显示页面数据PageBean
package cn.itcast.domain;
import java.util.List;
public class PageBean {
private List list;
private int totalRecord;
private int pageSize;
private int totalPage;//这个由内部的totalRecord和pageSize所得,所以没必要有set方法
private int currentPage;
private int previousPage;//上一页(同totalPage)
private int nextPage;//下一页(同totalPage)
private int[] pageBar;//页码条,它根据总页数来生成页码条
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPage() {
//100 5 20
//101 5 21
if (this.totalRecord% this.pageSize == 0) {
this.totalPage = this.totalRecord / this.pageSize;
} else {
this.totalPage = this.totalRecord / this.pageSize + 1;
}
return totalPage;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPreviousPage() {
if (this.currentPage - 1 < 1) {
this.previousPage = 1;
} else {
this.previousPage = this.currentPage - 1;
}
return previousPage;
}
public int getNextPage() {
if (this.currentPage + 1 >= this.totalPage) {
this.nextPage = this.totalPage;
} else {
this.nextPage = this.currentPage + 1;
}
return nextPage;
}
public int[] getPageBar() {
int pageBar[] = new int[this.totalPage];
for (int i = 0; i < this.totalPage; i++) {
pageBar[i] = i;
}
this.pageBar = pageBar;//一调用页面,就得到需要显示的页码条
return pageBar;
}
}
4. 改造Dao层CustomerDaoImpl
,在里面添加pageQuery
方法,最后将这个方法抽取到接口CustomerDao
里去
//获取到页面数据和大小
public QueryResult pageQuery(int startIndex, int pageSize) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
QueryResult qr = new QueryResult();
try {
conn = JdbcUtils.getConnection();
//取出某一页的数据
String sql = "select * from customer limit ?,?";
ps = conn.prepareStatement(sql);
ps.setInt(1, startIndex);
ps.setInt(2, pageSize);
rs = ps.executeQuery();
List list = new ArrayList();
while (rs.next()) {
Customer customer = new Customer();
customer.setBirthday(rs.getDate("birthday"));
customer.setCellphone(rs.getString("cellphone"));
customer.setDescription(rs.getString("description"));
customer.setEmail(rs.getString("email"));
customer.setGender(rs.getString("gender"));
customer.setId(rs.getString("id"));
customer.setName(rs.getString("name"));
customer.setPreference(rs.getString("preference"));
customer.setType(rs.getString("type"));
list.add(customer);
}
qr.setList(list);//把页面数据给QueryResult
sql = "select count(*) from customer";//返回表的总记录数
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
//总记录数就只有一条记录,可以用命令语句查看
if (rs.next()) {
qr.setTotalRecord(rs.getInt(1));//一行一列取第一列
}
return qr;
} catch (Exception e) {
throw new DaoException(e);
} finally {
JdbcUtils.release(conn, ps, rs);
}
}
5. 改造Service层BusinessServiceImpl
,在里面添加pageQuery
方法,最后将这个方法抽取到接口BusinessService
里去
@Override
public PageBean pageQuery(QueryInfo queryInfo) {
//1.调dao获取到页面数据
QueryResult qr = dao.pageQuery(queryInfo.getStartIndex(), queryInfo.getPageSize());
//2.根据dao查询结果,生成页面显示需要PageBean
PageBean bean = new PageBean();
bean.setCurrentPage(queryInfo.getCurrentPage());
bean.setList(qr.getList());
bean.setPageSize(queryInfo.getPageSize());
bean.setTotalRecord(qr.getTotalRecord());
return bean;
}
6. 改造Servlet,ListCustomerServlet
package cn.itcast.web.controller;
import cn.itcast.domain.PageBean;
import cn.itcast.domain.QueryInfo;
import cn.itcast.service.BusinessService;
import cn.itcast.service.impl.BusinessServiceImpl;
import cn.itcast.utils.WebUtils;
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.util.List;
//处理用户分页请求
@WebServlet(name = "ListCustomerServlet", urlPatterns = "/servlet/ListCustomerServlet")
public class ListCustomerServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
QueryInfo info = WebUtils.request2Bean(request, QueryInfo.class);
BusinessService service = new BusinessServiceImpl();
PageBean pageBean = service.pageQuery(info);
request.setAttribute("pageBean", pageBean);
request.getRequestDispatcher("/WEB-INF/jsp/listcustomer.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("message", "查看客户失败");
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
7.同时, listcustomer.jsp
也要做出相应的更改
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>列出所有客户</title>
</head>
<body style="text-align: center">
<table frame="border" width="85%" align="center">
<tr>
<td>客户姓名</td>
<td>性别</td>
<td>生日</td>
<td>手机</td>
<td>邮箱</td>
<td>爱好</td>
<td>类型</td>
<td>备注</td>
<td>操作</td>
<tr>
<c:forEach var="c" items="${requestScope.pageBean.list}">
<tr>
<td>${c.name }</td>
<td>${c.gender }</td>
<td>${c.birthday }</td>
<td>${c.cellphone }</td>
<td>${c.email }</td>
<td>${c.preference }</td>
<td>${c.type }</td>
<td>${c.description }</td>
<td>
<a href="#">修改</a>
<a href="#">删除</a>
</td>
<tr>
</c:forEach>
</table>
<br>
<script type="text/javascript">
function gotoPage(currentPage) {
window.location.href = '${pageContext.request.contextPath}/servlet/ListCustomerServlet?currentPage=' + currentPage;
}
</script>
共[${pageBean.totalRecord}]条记录,每页[${pageBean.pageSize}]条,共[${pageBean.totalPage}]页,
当前第[${pageBean.currentPage}]页,
<a href="javascript:;" onclick="gotoPage(${pageBean.previousPage})">上一页</a>
<c:forEach var="pageNum" items="${pageBean.pageBar}">
<a href="javascript:;" onclick="gotoPage(${pageNum})">${pageNum}</a>
</c:forEach>
<a href="javascript:;" onclick="gotoPage(${pageBean.nextPage})">下一页</a>
</body>
</html>
关于分页实现还有很多小细节需要处理,后面会接着更新。。。
源代码:https://github.com/yvettee36/Customer1.git
接上篇:客户关系管理案例
连下篇:完成客户关系管理案例
网友评论