页面数据之分页查询

本文提示,因为细节太多,最好有一定基础的码友,因为其中我封装了其他方法!大家可以从我这里看一部分比较重要的代码!

 

这里我说一下,分页的主要流程:

页面数据之分页查询_第1张图片

流程1:设置为存储分页信息的PageBean

页面数据之分页查询_第2张图片

在servlet层:

页面数据之分页查询_第3张图片

在service层和dao层:

页面数据之分页查询_第4张图片

jsp页面::我就不说明了,因为其中代码注释已近很详细了,可以直接看代码!

 

接下来,把我的源码给大家:

PageBean:



import java.util.List;

public class PageBean {
	
	private int currentPage;//当前页码
//	private int toatalPage;//总页数
	private int totalData;//总数据条数
	private int pageSize;//每页的大小
	private List beanList;//每页的数据
	
	
	
	public int getCurrentPage() {
		return currentPage;
	}
	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}
	
	//总页数不需要指定(由 总数据/每页 大小可得)
	public int getTotalPage() {
		int totalPage = totalData/pageSize;
		//如果正好,则返回,如果多余,则多余的再加一页!
		return totalData%pageSize==0?totalPage:totalPage+1;
	}
	
	public int getTotalData() {
		return totalData;
	}
	public void setTotalData(int totalData) {
		this.totalData = totalData;
	}
	
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	
	public List getBeanList() {
		return beanList;
	}
	public void setBeanList(List beanList) {
		this.beanList = beanList;
	}
	
	
}

dao代码:我就把调用的那个方法拿出来给大家看下(其他部分的代码跟我们的题目没有关系):

/**
	 * 查询所有的用户
	 * 用户保存在list集合中
	 * @return
	 */
	public PageBean findAll(int currentPage, int pageSize) {
		
		PageBean pageBean = new PageBean<>();
		
		String sql1 = "select count(*) from t_customer";
		
		Number num;
		try {
			num = (Number)qr.query(sql1, new ScalarHandler());
			//设置总的数据条数
			pageBean.setTotalData(num.intValue());
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		
		String sql2 = "select * from t_customer order by cname limit ?,?";
		
		//设置从当前页面开始查询条数
		int begin = (currentPage-1)*pageSize;
		int step = pageSize;
		
		Object params[] = {begin,step};
		try {
			pageBean.setBeanList(qr.query(sql2, new BeanListHandler(Customer.class),params));
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return pageBean ;
	}

 

seevice层代码:

/**
	 * 查询pageBean信息
	 * 返回一个pageBean
	 * @return
	 */
	public PageBean findAll(int currentPage, int pageSize){
		return customerDao.findAll(currentPage,pageSize);
	}
	


servlet层代码:

/**
	 * 分页查询(查询所有用户,分页显示)
	 * @param request
	 * @param response
	 * @return
	 * @throws ServletException
	 * @throws IOException
	 */
	public String findAll(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//设置每页的数据条数(10)
		int pageSize = 10;
		//设置当前的页数
		int currentPage = getPc(request) ;
		
		//从service得到的pageBean中已经有了totalData,和beanlist(每页的数据)
		PageBean pageBean = customerService.findAll(currentPage,pageSize);
		
		//再设置     每页的数据条数和当前的页数
		//那么此时的pageBean就是完整的了
		pageBean.setPageSize(pageSize);
		pageBean.setCurrentPage(currentPage);
		
		//保存pageBean
		request.setAttribute("pageBean",pageBean);
		
		return "f:/list.jsp";
	}
	
	/**
	 * 从请求的参数里面获取当前页面值
	 * @return
	 */
	public int getPc(HttpServletRequest request) {
		String pageCode = request.getParameter("pc");
		int pc = 1;
		if(pageCode != null && !pageCode.trim().isEmpty()) {
			pc = Integer.parseInt(pageCode);
		}
		return pc;
	}
	

 

jsp页面代码:


		
客户姓名 性别 生日 手机 邮箱 描述 操作
${customer.cname } ${customer.gender } ${customer.birthday } ${customer.cellphone } ${customer.email } ${customer.description } 编辑 删除

第${pageBean.currentPage }页/共${pageBean.totalPage }页 首页 <%-- 如果已经是第一页了,那么就不需要上一页了 --%> <%-- 也就那么就不需要首页的超链接了 --%> 首页 上一页 <%-- 这一个choose是处理begin(开始的页面)end(结束的页码数) --%> <%-- 如果总页数小于10 那么页码就是固定的(1 2 3 4 5 6 7 8 9 10) --%> <%-- 否则就会随着当前页数发生变化 --%> <%-- 测试下面的公式 假如当前页面为6,则有 2 3 4 5 (6) 7 8 9 10 11 --%> <%-- 这里又会发生 头溢出 或者 尾溢出 --%> <%-- 头溢出:说明 1-10页还可以表示 ( 因为 begin-4 <1 )--%> <%-- 尾溢出:说明用不到当前页面+5 就可以显示结束 --%> <%-- 这个forEach从上面获得begin和end 那么就可以输出导航页面了--%> ${i } ${i } <%-- 如果已经是尾页了,那么就不需要下一页了 --%> <%-- 也就就不需要尾页的超链接了 --%> 下一页 尾页

 

 

 

 

 

 

 

你可能感兴趣的:(java)