1、分页Bean类 Pagejavascript
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; } //-----------*************--------------------// }
2、后台分页方法html
一、Servlet 后台JDBC分页代码示例java
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持久层分页代码示例sql
/** * 查询数据库员工表中的总记录数 * @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>
3、JSP页面分页代码示例session
<%@ 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中快速分页.app
private static final int pageSize = 8; // 每页记录条数ssh
rowCount 为数据库中,总的记录条数。jsp
int pageCount = (rowCount % pageSize == 0) ? (rowCount / pageSize) : (rowCount / pageSize + 1);//总共有多少页。
logger.info("--总页数--" + pageCount+",--当前页为-->"+pageNow);ide
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>