后台分页(MySQL分页)

原创
2016/05/09 10:16
阅读数 87

一、分页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>&nbsp;&nbsp;
				  	</c:when>
				  	<c:otherwise>
				  		<strong>页次:0/0</strong>&nbsp;&nbsp;
				  	</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>

 

展开阅读全文
打赏
2
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
2
分享
返回顶部
顶部