我是靠谱客的博主 复杂蜗牛,最近开发中收集的这篇文章主要介绍分页技术,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

(一)为什么使用分页技术

  Jsp页面显示数据,数据库有多少条记录,就显示多少条?

  1. 页面冗长,不好排版
  2. 页面打开慢,因为查询的数据多

  使用分页技术解决:每次显示指定的记录数据,点击首页、上一页、下一页、尾页实现页面数据的更换!

  (二)分页原理:

    


  (三)分页过程

    1.设计javaBean  

    分页的javabean对象,用户封装分页数据、业务。  

public class PageBean {

	private int pageCount = 3;//每页显示多少行, 默认3行
	private int currentPage=1;// 当前页, 默认显示第一页,即1-3行
	private int totalCount;// 总记录数
	private int totalPage;// 总页数: 由总记录数/每页显示多少行,得出
	private List<Employee> listEmp; // 一页显示的记录的集合
	
	public int getTotalPage() {
		// 根据总记录数,计算总页数(7,3)
		if (totalCount % pageCount == 0) {
			totalPage = totalCount / pageCount;
		} else {
			totalPage = totalCount / pageCount + 1;
		}
		return totalPage;
	}
    ......
}
  2.实现dao

  员工信息,数据访问操作。

/**
 * 员工信息,数据访问操作
 * @author Shuaigexiaobo
 *
 */
public class EmployeeDao {
	
	private Connection con;
	private PreparedStatement pstmt;
	private ResultSet rs;
	
	

	/**
	 * 根据页数查询数据, 查询到数据后,设置到pageBean的属性中 
	 * @param pageBean
	 */
	public void getPageBeanData(PageBean pageBean){
		
		// 集合保存查询到的数据
		List<Employee> list = new ArrayList<Employee>();
		
		// 查询开始行
		int start = (pageBean.getCurrentPage()-1) * pageBean.getPageCount(); 
		int count = pageBean.getPageCount();
		
		
		//分页sql语句
		String sql = "SELECT * FROM employee LIMIT ?,?";
		
		
		try {
			// 获取连接
			con = JdbcUtil.getConnection();
			// 获取stmt对象
			pstmt = con.prepareStatement(sql);
			// 设置值
			pstmt.setInt(1, start);
			pstmt.setInt(3, count);
			
			// 执行查询的sql语句
			rs = pstmt.executeQuery();
			while (rs.next()) {
				// 遍历每一行记录,封转为对象,添加到集合中
				Employee emp = new Employee();
				emp.setEmpNo(rs.getInt("empNo"));
				emp.setEmpName(rs.getString("empName"));
				emp.setSalary(rs.getDouble("salary"));
				emp.setAge(rs.getInt("age"));
				
				// 设置部门信息
				emp.setDeptId(rs.getInt("deptid"));
				emp.setDeptName(rs.getString("deptName"));
				
				// 添加到集合
				list.add(emp);
			}
			// 把封装后的list集合,设置到javabean对象属性中
			pageBean.setListEmp(list);
			// 调用方法,查询总记录数
			this.getTotalCount(pageBean);
			
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			JdbcUtil.closeAll(con, pstmt, rs);
		}
	}
	
	// 分页用: 查询总记录数
	public void getTotalCount(PageBean pageBean) {
		// 查询sql语句
		//分页sql语句
		String sql = "SELECT count(1) FROM employee"
		
		try {
			// 获取连接
			con = JdbcUtil.getConnection();
			// 获取stmt对象
			pstmt = con.prepareStatement(sql);
			// 执行查询
			rs = pstmt.executeQuery();
			// 读取结果
			if (rs.next()){
				pageBean.setTotalCount(rs.getInt(1));
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			JdbcUtil.closeAll(con, pstmt, rs);
		}
	}
}

3.Servlet的编写

public class IndexServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 获取session
		HttpSession session = request.getSession();
		// 实例化dao对象
		EmployeeDao empDao = new EmployeeDao();

		// 分页Servlet处理:1. 创建分页javabean对象; 2. 保存到域中; 3. 跳转

		// 获取分数参数:当前页
		String curr = request.getParameter("currentPage");
		int currentPage = (curr == null || curr == "") ? 1 : Integer.parseInt(curr);	

		// 1. 创建分页对象
		// 先获取
		PageBean pageBean = (PageBean) session.getAttribute("pageBean");
		// 判断: 第一次运行时候,创建分页对象
		if (pageBean == null) {
			pageBean = new PageBean();
		}
		// 把页面查询参数,即页数,设置到pageBean中
		pageBean.setCurrentPage(currentPage);
		

		// 2. 调用方法,进行分页查询
		empDao.getPageBeanData(pageBean);

		// 保存到域中
		session.setAttribute("pageBean", pageBean);

		// 3. 跳转
		response.sendRedirect(request.getContextPath() + "/index.jsp");

	}
}

4.前端页面的显示

<body>
    <!-- 分页页面列表处理、显示: -->
    
    
    <table border="1" width="80%" align="center" cellpadding="3" cellspacing="0">
    	<tr>
    		<td>编号</td>
    		<td>员工名称</td>
    		<td>年龄</td>
    		<td>薪水</td>
    		<td>部门名称</td>
    	</tr>
    	<!-- 循环遍历:pageBean中的list -->
    	<c:if test="${not empty sessionScope.pageBean.listEmp}">
    	<c:forEach var="emp" items="${sessionScope.pageBean.listEmp}">
    	<tr>
    		<td>${emp.empNo }</td>
    		<td>${emp.empName }</td>
    		<td>${emp.age }</td>
    		<td>${emp.salary }</td>
    		<td>${emp.deptName }</td>
    	</tr>
    	</c:forEach>
    	
    	</c:if>
    	
    	<tr>
    		<td colspan="5" align="center">
    			<!-- 当前页为首页:不能点击首页、上一页;  
    				当前页为末页: 不能点击下一页、末页
    				当前页其他页:
    					首页、上下、末页都可以点击
    			 -->
    			 
    			 <c:choose>
    			 	<c:when test="${sessionScope.pageBean.currentPage == 1}">
    			 		首页  上一页
    			 		<a href="${pageContext.request.contextPath }/indexServlet?currentPage=${sessionScope.pageBean.currentPage + 1}">下一页</a>
    					<a href="${pageContext.request.contextPath }/indexServlet?currentPage=${sessionScope.pageBean.totalPage}">末页</a>
    			 	</c:when>
    			 	<c:when test="${sessionScope.pageBean.currentPage == sessionScope.pageBean.totalPage}">
    			 		<a href="${pageContext.request.contextPath }/indexServlet?currentPage=1">首页</a>
    					<a href="${pageContext.request.contextPath }/indexServlet?currentPage=${sessionScope.pageBean.currentPage - 1}">上一页</a>
    			 		下一页  末页
    			 	</c:when>
    			 	<c:otherwise>
		    			<a href="${pageContext.request.contextPath }/indexServlet?currentPage=1">首页</a>
		    			<a href="${pageContext.request.contextPath }/indexServlet?currentPage=${sessionScope.pageBean.currentPage - 1}">上一页</a>
		    			<a href="${pageContext.request.contextPath }/indexServlet?currentPage=${sessionScope.pageBean.currentPage + 1}">下一页</a>
		    			<a href="${pageContext.request.contextPath }/indexServlet?currentPage=${sessionScope.pageBean.totalPage}">末页</a>
    			 	</c:otherwise>
    			 </c:choose>

            </td>
        </tr>
	</table>
</body>	

  

最后

以上就是复杂蜗牛为你收集整理的分页技术的全部内容,希望文章能够帮你解决分页技术所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部