package com.etc.util;
import java.util.List;
public class PageUtil<T> {
//具体分页所用的对象组成的集合
private List<T> list;
//可分的最大页数
private int maxPages;
//总记录条数
private int totalRecords;
//每页显示的记录条数
private int pageRecords=5;
//要查询的页码
private int pageIndex;
//上一页的页码
private int lastPageIndex;
//下一页的页码
private int nextPageIndex;
/**
* 当前页码
* @return
*/
public int getPageIndex() {
return this.pageIndex;
}
/**
* 当前页码
* @return
*/
public void setPageIndex(int pageIndex) {
if(pageIndex <= 1) {
this.pageIndex = 1;
return;
}
this.pageIndex = pageIndex;
}
/**
* 每页记录条数
* @return
*/
public int getPageRecords() {
return pageRecords;
}
/**
* 每页记录条数
* @return
*/
public void setPageRecords(int pageRecords) {
this.pageRecords = pageRecords;
}
/**
* 每页的记录数据
* @return
*/
public List<T> getList() {
return list;
}
/**
* 每页的记录数据
* @return
*/
public void setList(List<T> list) {
this.list = list;
}
/**
* 总页数
* @return
*/
public int getMaxPages() {
setMaxPages();
return maxPages;
}
/**
* 总页数
* @return
*/
public void setMaxPages() {
if (totalRecords % pageRecords == 0) {
maxPages = totalRecords / pageRecords;
} else {
maxPages = totalRecords / pageRecords + 1;
}
}
/**
* 总记录条数
* @return
*/
public int getTotalRecords() {
return totalRecords;
}
/**
* 总记录条数
* @return
*/
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
/**
* 得到上一页码
*/
public int getLastPageIndex() {
pageIndex = getPageIndex(); // 得到当前页码
if (pageIndex <=1) {
return 1;
}
return pageIndex - 1;
}
public void setLastPageIndex() {
lastPageIndex=getLastPageIndex();
}
/**
* 得到下一页码
*/
public int getNextPageIndex() {
pageIndex = getPageIndex(); // 得到当前页码
maxPages = getMaxPages(); // 得到最大页码数
if (pageIndex >= maxPages) {
return maxPages;
}
return pageIndex + 1;
}
public void setNextPageIndex() {
nextPageIndex=getNextPageIndex();
}
}
理解:在dao实现类里写一个方法,该方法需要传入的形参为要查询的页码、每页指定条数,通过自定义分页工具类PageUtil进行对象的封装,以便在jsp页码进行调用,实现必要的功能。PageUtil里的5个成员变量都是必要的:
list里面封装的是查询指定页码的指定个数的对象,在Jsp用表达式进行遍历显示
maxPages可用于选择最后一页
totalRecords也可用于显示总条数
pageRecords用于计算页数
pageIndex可用于上一页下一页的显示
以下为dao实现类里的分页的方法:
@Override
public PageUtil<Student> queryPage(int index, int pageRecords) {
Statement st = null;
ResultSet rs = null;
ResultSet rsPage = null;
List<Student> list = new ArrayList<Student>();
int totalRecords = 0;
PageUtil<Student> page = new PageUtil<Student>();
Connection conn = BaseDao.getConn();
// 查询总记录数目
String sql = "select count(1) from student";
try {
st = conn.createStatement();
rs = st.executeQuery(sql);
rs.next();
totalRecords = rs.getInt(1);
page.setTotalRecords(totalRecords);
rs.close();
st.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
// 总页数
page.setMaxPages((int) Math.ceil((double) totalRecords / pageRecords));
// 当前页数保存在对象
page.setPageIndex(index);
// 指定页码的数据
String sqlPage = "select * from student s INNER JOIN grade g where s.gradeId=g.gradeId ORDER BY studentNo limit ?,?";
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sqlPage);
ps.setObject(1, pageRecords * (index - 1));
ps.setObject(2, pageRecords);
rsPage = ps.executeQuery();
while (rsPage.next()) {
Student stu = new Student();
stu.setAddress(rsPage.getString("address"));
stu.setAge(rsPage.getInt("age"));
stu.setBirthday(rsPage.getDate("birthday"));
stu.setEmail(rsPage.getString("email"));
stu.setGrade(new Grade(rsPage.getInt("gradeId"), rsPage.getString("gradeName")));
stu.setPhone(rsPage.getString("phone"));
stu.setSex(rsPage.getString("sex"));
stu.setStudentNo(rsPage.getInt("studentNo"));
stu.setName(rsPage.getString("name"));
list.add(stu);
}
page.setList(list);
return page;
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
BaseDao.closeAll(conn, ps, rsPage);
}
return null;
}
以下为jsp页面功能实现,pageUtil为封装过数据的PageUtil的对象:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var="base" value="${pageContext.request.contextPath}"></c:set>
<table cellspacing="0">
<tr>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>电话</th>
<th>地址</th>
<th>邮箱</th>
<th>生日</th>
<th>年级</th>
</tr>
<c:forEach items="${pageUtil.list}" var="stu">
<tr>
<td>${stu.grade.gradeId }</td>
<td>${stu.name }</td>
<td>${stu.sex }</td>
<td>${stu.age }</td>
<td>${stu.phone }</td>
<td>${stu.address }</td>
<td>${stu.email }</td>
<td>${stu.birthday }</td>
<td>${stu.grade.gradeName}</td>
</tr>
</c:forEach>
</table>
一共${pageUtil.maxPages }页,当前为第 ${pageUtil.pageIndex }页
<a href="${base}/studentSer?index=1">第一页</a>
<a href="${base}/studentSer?index=${pageUtil.pageIndex>1?pageUtil.pageIndex-1:1}">上一页</a>
<c:forEach begin="1" end="${pageUtil.maxPages}" var="i">
<a href="${base}/studentSer?index=${i}">${i}</a>
</c:forEach>
<a href="${base}/studentSer?index=${pageUtil.pageIndex<pageUtil.maxPages?pageUtil.pageIndex+1:pageUtil.maxPages}">下一页</a>
<a href="${base}/studentSer?index=${ pageUtil.maxPages}">最后一页</a>
本文介绍了一种基于Java的分页查询实现方案,利用自定义PageUtil类进行封装,包括了总页数、当前页码等关键信息,并通过DAO层的具体实现展示了如何进行数据库分页查询,最终在JSP页面上展示查询结果。
1017

被折叠的 条评论
为什么被折叠?



