一、分页Bean类 Page
package com.yuu.ssh.common;
import java.io.Serializable;
public class Page implements Serializable {
private int pageNow = 1; // 当前页数
private int pageSize = 10; // 每页显示记录的条数
private int totalCount; // 总的记录条数
private int totalPageCount; // 总的页数
private int startPos; // 开始位置,从0开始
//----*****---以下-4 个参数可以省略,有需要时再加--***----------//
private boolean hasFirst;// 是否有首页
private boolean hasPre;// 是否有前一页
private boolean hasNext;// 是否有下一页
private boolean hasLast;// 是否有最后一页
//-----------*************--------------------//
public Page() {
super();
// TODO Auto-generated constructor stub
}
public Page(int totalCount, int pageNow) {
this.totalCount = totalCount;
this.pageNow = pageNow;
}
// 获取数据总记录条数
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
// 获取当前页码
public int getPageNow() {
return pageNow;
}
public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}
// 获取每页数据条目数
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
// 获得一共有多少页码数
public int getTotalPageCount() {
totalPageCount = getTotalCount() / getPageSize();
return (totalCount % pageSize == 0) ? totalPageCount
: totalPageCount + 1;
}
// 获取每页的起始条目号码
public int getStartPos() {
return (pageNow - 1) * pageSize;
}
public void setTotalPageCount(int totalPageCount) {
this.totalPageCount = totalPageCount;
}
public void setStartPos(int startPos) {
this.startPos = startPos;
}
//-----------******以下方法可省略*******--------------------//
/**
* 是否是第一页
*/
public boolean isHasFirst() {
return (pageNow == 1) ? false : true;
}
public void setHasFirst(boolean hasFirst) {
this.hasFirst = hasFirst;
}
public boolean isHasPre() {
// 如果有首页就有前一页,因为有首页就不是第一页
return isHasFirst() ? true : false;
}
public void setHasPre(boolean hasPre) {
this.hasPre = hasPre;
}
public boolean isHasNext() {
// 如果有尾页就有下一页,因为有尾页表明不是最后一页
return isHasLast() ? true : false;
}
public void setHasNext(boolean hasNext) {
this.hasNext = hasNext;
}
public boolean isHasLast() {
// 如果不是最后一页就有尾页
return (pageNow == getTotalCount()) ? false : true;
}
public void setHasLast(boolean hasLast) {
this.hasLast = hasLast;
}
//-----------*************--------------------//
}
二、后台分页方法
1、Servlet 后台JDBC分页代码示例
public List<Staff> findByPage(int pageNumber, int pageSize){
Connection conn=null;
PreparedStatement ps=null;
String sql= "select * from tb_staff limit ?,?";
// limit x,y x代表每页的起始记录数--代表第(x+1)页,每页以 x*pageSize开始; y代表每页显示y条数据(pageSize).
ResultSet rs=null;
List<Staff> list=null;
Dept dept=null;
Job job=null;
IDeptDao dao=null;
IJobDao dao_j=null;
try {
conn=JDBCUtils.getConnection();
ps=conn.prepareStatement(sql);
ps.setInt(1, pageNumber);
ps.setInt(2, pageSize);
ps.executeUpdate();
list = new ArrayList<Staff>();
while(rs.next()){
int did=rs.getInt(3);
dept=dao.findDeptById(did);
System.out.println(dept);
int jid=rs.getInt(4);
job=dao_j.findJobById(jid);
Staff staff = new Staff();
staff.setId(rs.getLong(1));
staff.setId(rs.getInt(2));
staff.setName(rs.getString(3));
staff.setDept(dept);
staff.setJob(job);
staff.setDate(rs.getString(6));
staff.setSalary(rs.getDouble(7));
staff.setEmail(rs.getString(8));
staff.setPhone(rs.getString(9));
list.add(staff);
System.out.println(list.size());
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtils.close(rs, ps, conn);
}
return list;
}
2. Hibernate持久层分页代码示例
/**
* 查询数据库员工表中的总记录数
* @return
*/
int getCountEmp();
@Override
public int getCountEmp() {
// 方法一:
Query q = sessionFactory.getCurrentSession().createQuery("from Employee");
//总记录数
ScrollableResults scroll = q.scroll(); // 得到滚动的结果集
scroll.last(); // 滚动到最后一行
int totalCount = scroll.getRowNumber() + 1;// 得到滚到的记录数,即总记录数
// 方法二:聚合函数统计
// Query q = session.createQuery("select count(*) from Employee");
// Long num = (Long) q.uniqueResult();
// System.out.println(num);
return totalCount;
}
/**
* 查询全部员工信息,分页显示
* @param index 起始记录
* @param count 每页显示记录条数
* @return
*/
List<Employee> getAll(int index, int count);
@SuppressWarnings("unchecked")
@Override
public List<Employee> getAll(int index, int count) {
Session session = sessionFactory.getCurrentSession();
Query q = session.createQuery("from Employee");
// 设置分页参数
q.setFirstResult(index);
q.setMaxResults(count);
// 查询
// q.list();
return q.list();
}
3.MyBatis持久层分页代码示例
int countMedia(); //统计出所有的视频数据量
<select id="countMedia" resultType="java.lang.Integer" >
select count(*) from t_media
</select>
List<TMediaCustom> getMediaPage(Page page); //查询带分页视频列表
<select id="getMediaPage" parameterType="com.yuu.ssm.common.Page" resultMap="ResultMapWithBLOBs">
select id,vname, src_id, pic_id, type_id, descript, distrit, keyword, uptime, uploader, playcount, downloadcount, collectcount
from t_media limit #{startPos},
#{pageSize}
</select>
三、JSP页面分页代码示例
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<script type="text/javascript">
function jumpToPage(pageNo) {
window.location.href = "<%=request.getContextPath()%>/emp_pagelist.action?pageNow="+pageNo;
}
</script>
<table id="tb_fy" border="1" align="center" width="80%" cellpadding="5" cellspacing="0">
<tr>
<td>
<strong>页次:${page.pageNow }/${page.totalPageCount }</strong>
<span style="font-size: 12">共${page.totalCount }条记录</span>
</td>
<td> <a href="emp_pagelist.action?pageNow=1">首页</a> </td>
<td>
<c:choose>
<c:when test="${page.pageNow - 1 > 0}">
<a href="emp_pagelist.action?pageNow=${page.pageNow - 1}">上一页</a>
</c:when>
<c:when test="${page.pageNow - 1 <= 0}">
<a href="emp_pagelist.action?pageNow=1">上一页</a>
</c:when>
</c:choose>
</td>
<td>当前页码:<select name="currentPageNo">
<option value ="1">${page.pageNow}</option>
</select>
</td>
<td>
<!-- 显示超链接 -->
<c:if test="${page.pageNow>0 }">
<c:forEach begin="${page.pageNow }" end="${(page.pageNow+6)<=page.totalPageCount?(page.pageNow+6):page.totalPageCount}" var="i">
<a href="javascript:jumpToPage(${i })">[${i }]</a>
</c:forEach>
</c:if>
</td>
<td>
<c:choose>
<c:when test="${page.pageNow + 1 < page.totalPageCount}">
<a href="emp_pagelist.action?pageNow=${page.pageNow + 1}">下一页</a>
</c:when>
<c:when test="${page.pageNow + 1 >= page.totalPageCount}">
<a href="emp_pagelist.action?pageNow=${page.totalPageCount}">下一页</a>
</c:when>
</c:choose>
</td>
<td><a href="emp_pagelist.action?pageNow=${page.totalPageCount}">末页</a> </td>
<td>一共有 : ${page.totalPageCount} 页</td>
</tr>
</table>
常用:在Action/Servlet中快速分页.
private static final int pageSize = 8; // 每页记录条数
rowCount 为数据库中,总的记录条数。
int pageCount = (rowCount % pageSize == 0) ? (rowCount / pageSize) : (rowCount / pageSize + 1);//总共有多少页。
logger.info("--总页数--" + pageCount+",--当前页为-->"+pageNow);
pageNow 为 当前 显示 页码,需要从页面传值到后台获取。
public class RedPayOrderQueryAction extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(RedPayOrderQueryAction.class);
private IRedPayService redPayService;
private static final int pageSize = 8;
public IRedPayService getRedPayService() {
return redPayService;
}
public void setRedPayService(IRedPayService redPayService) {
this.redPayService = redPayService;
}
public ActionForward getAllOrderInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setCharacterEncoding("UTF-8");
String phoneNo = request.getParameter("phoneNo").trim();
logger.info("手机号码为:"+phoneNo);
String orderNo = request.getParameter("orderNo").trim();
logger.info("订单号为:"+orderNo);
String s = request.getParameter("status");
logger.info("订单状态为:"+s);
if(phoneNo==null){
phoneNo=""; //以防请求路径没有phoneNo参数。
}
if(orderNo==null){
orderNo=""; //以防请求路径没有orderNo参数。
}
int pageNow = Integer.valueOf(request.getParameter("pageNow")); // 当前页码
int countNow = (pageNow - 1) * pageSize; // 每页起始记录数。
String beginTime = request.getParameter("beginTime");
logger.info("查询开始时间-->"+beginTime);
String endTime = request.getParameter("endTime");
logger.info("查询结束时间-->"+endTime);
if(beginTime==null||beginTime.equals("")){
beginTime="2000-01-01 00:00:00";
logger.info("页面查询没有设置开始查询时间,此时开始时间默认值设置为:"+beginTime);
}
if(endTime==null||endTime.equals("")){
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
endTime = df.format(date);
logger.info("页面查询没有设置结束查询时间,此时结束时间默认值设置为:"+endTime);
}
int rowCount = 0;
List<RedPacketPay>orderList =null;
if(phoneNo.length()>0){ // 根据用户手机号码查询。
rowCount = redPayService.getCountNumByPhone(phoneNo, beginTime, endTime,s).size(); // 总共记录数。
orderList =redPayService.findOrderPageByPhone(phoneNo, beginTime, endTime, countNow, pageSize,s);
}
else if(orderNo.length()>0){ // 根据订单号码查询。
rowCount = redPayService.findOrderByOrderNo(orderNo, beginTime, endTime,s).size();
orderList = redPayService.findOrderPageByOrderNo(orderNo, beginTime, endTime, countNow, pageSize,s);
}
else{ // 查询所有订单。
rowCount = redPayService.getCountNumByAllOrder(beginTime, endTime,s); // 总记录条数。
orderList=redPayService.findAllOrder(beginTime,endTime,countNow, pageSize,s);
}
int pageCount = (rowCount % pageSize == 0) ? (rowCount / pageSize) : (rowCount / pageSize + 1);//总共有多少页。
logger.info("--总页数--" + pageCount+",--当前页为-->"+pageNow);
request.setAttribute("orderList", orderList);
logger.info("--订单列表orderList的值--" + orderList);
request.setAttribute("phoneNo", phoneNo);
request.setAttribute("orderNo", orderNo);
request.setAttribute("pageNow", pageNow);
request.setAttribute("pageCount", pageCount);
request.setAttribute("beginTime", beginTime);
request.setAttribute("endTime", endTime);
request.setAttribute("statusCode", s);
return mapping.findForward("success");
}
}
JSP页面写法:
======================================================================================
<div id="d3" style="margin-left: 20px;text-align: center;">
<div id="d_one">
<!-- 显示首页 -->
<c:choose>
<c:when test="${pageNow==1}">
首页
</c:when>
<c:when test="${pageNow==null}">
首页
</c:when>
<c:otherwise>
<a href="javascript:jumpToPage(1,'${userName}','${caseStatus}')">首页</a>
</c:otherwise>
</c:choose>
<!-- 显示上一页 -->
<c:choose>
<c:when test="${pageNow>1}">
<a href="javascript:jumpToPage(${pageNow-1 },'${userName}','${caseStatus}')">上一页</a>
</c:when>
<c:otherwise>
上一页
</c:otherwise>
</c:choose>
<!-- 显示下一页 -->
<c:choose>
<c:when test="${pageNow < pageCount}">
<a href="javascript:jumpToPage(${pageNow+1 },'${userName}','${caseStatus}')">下一页</a>
</c:when>
<c:otherwise>
下一页
</c:otherwise>
</c:choose>
<!-- 显示尾页 -->
<c:choose>
<c:when test="${pageNow == pageCount}">
尾页
</c:when>
<c:otherwise>
<a href="javascript:jumpToPage(${pageCount },'${userName}','${caseStatus}')">尾页</a>
</c:otherwise>
</c:choose>
</div>
<div id="d_two">
<c:choose>
<c:when test="${pageNow !=null }">
<strong>页次:${pageNow }/${pageCount }</strong>
</c:when>
<c:otherwise>
<strong>页次:0/0</strong>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${pageNow !=null }">
<span style="font-size: 12">共${rowCount }条记录</span>
</c:when>
<c:otherwise>
<span style="font-size: 12">共0条记录</span>
</c:otherwise>
</c:choose>
</div>
</div>
===========================================================================================
<table id="tb_fy" border="1" align="center" width="80%" cellpadding="5" cellspacing="0">
<tr>
<td>
<strong>页次:${page.pageNow }/${page.totalPageCount }</strong>
<span style="font-size: 12">共${page.totalCount }条记录</span>
</td>
<td> <a href="emp_pagelist.action?pageNow=1">首页</a> </td>
<td>
<c:choose>
<c:when test="${page.pageNow - 1 > 0}">
<a href="emp_pagelist.action?pageNow=${page.pageNow - 1}">上一页</a>
</c:when>
<c:when test="${page.pageNow - 1 <= 0}">
<a href="emp_pagelist.action?pageNow=1">上一页</a>
</c:when>
</c:choose>
</td>
<td>当前页码:<select name="currentPageNo">
<option value ="1">${page.pageNow}</option>
</select>
</td>
<td>
<!-- 显示超链接 -->
<c:if test="${page.pageNow>0 }">
<c:forEach begin="${page.pageNow }" end="${(page.pageNow+6)<=page.totalPageCount?(page.pageNow+6):page.totalPageCount}" var="i">
<a href="javascript:jumpToPage(${i })">[${i }]</a>
</c:forEach>
</c:if>
</td>
<td>
<c:choose>
<c:when test="${page.pageNow + 1 < page.totalPageCount}">
<a href="emp_pagelist.action?pageNow=${page.pageNow + 1}">下一页</a>
</c:when>
<c:when test="${page.pageNow + 1 >= page.totalPageCount}">
<a href="emp_pagelist.action?pageNow=${page.totalPageCount}">下一页</a>
</c:when>
</c:choose>
</td>
<td><a href="emp_pagelist.action?pageNow=${page.totalPageCount}">末页</a> </td>
<td>一共有 : ${page.totalPageCount} 页</td>
</tr>
</table>
===============================================================================
<table cellpadding="0" cellspacing="0" border="0" width="100%"
style="font-size: 12px; margin-left: 20px;">
<tr height="50px" align="center" style="background: #87CEEB;font-size: 15px;">
<td width="3%">
序号
</td>
<td width="12%">
案件号
</tr>
<c:forEach items="${caseList}" var="c" varStatus="status">
<tr height="30px;"
<c:if test="${status.count%2==0}"> bgcolor="#ffffff" </c:if> align="center">
<td>${status.index + pageNow*10-10+1}</td>