drp项目--分页查询用户信息

先上时序图:


     系统管理员请求查询所有的用户后,到达jsp在客户端取得相应的分页参数(pageNo,pageSize,),再提供方法查到所有用户,参数同前,返回用户列表userList,但是还需要返回这些记录的其他参数(totalRecords,pageSize,totalPage),然后再一步步显示到浏览器中。鉴于很多模块都使用分页,利用对象的封装性,方便复用,可做如下分页操作。

1.封装一个分页的对象PageModel,这里包括了分页相关的所有属性

	//结果集 
	private List<E> list;
	//查询记录数
	private int totalRecords;
	//每页记录数
	private int pageSize;
	//第几页
	private int pageNo;
	
	/**
	 * 总页数
	 * @return
	 */
	public int getTotalPages() {
		return (totalRecords + pageSize -1 )/pageSize;
	}
	
	/**
	 * 返回首页
	 * @return
	 */
	public int  getTopPageNo(){
		return 1;
	}
	/**
	 * 取得尾页
	 * @return
	 */
	public int getBottomPageNo(){
		return getTotalPages();
	}
	/**
	 * 取得上一页
	 * @return
	 */
	public int getPreviousPageNo(){
		if (pageNo <= 1) {
			return 1;
		}
		return pageNo -1 ;
	}
	/**
	 * 取得下一页
	 * @return
	 */
	public int getNextPageNo(){
		if (pageNo >= getTotalPages()) {
			return getTotalPages();
		}
		return pageNo + 1;
	}

2.UserManager中接收PageModel返回值,通过findUserList()查询结果,返回PageModel对象在页面中拿到,显示输出即可(在这里采用的是泛型集合的形式)

	/**
	 * 分页查询
	 * @param pageNo 第几页
	 * @param pageSize  每页多少条数据
	 * @return PageModel
	 */
	public PageModel<User> findUserList(int pageNo,int pageSize){
		//分页查询语句,定义一个stringBuffer拼接sql字符串,三层嵌套
		StringBuffer sbSql = new StringBuffer();
		sbSql.append("select user_id, user_name, password, contact_tel, email, create_date ")
			.append("from ") 
			.append("( ")
			.append("select rownum rn, user_id, user_name, password, contact_tel, email, create_date ")
			.append("from ")
			.append("( ")
			.append("select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id <> 'root' order by user_id ")
			.append(")  where rownum <= ? ")   //这是占位符
			.append(")  where rn > ? ");      //这是占位符

		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		PageModel<User> pageModel = null;
		
		
		try {
			
			conn=DbUtil.getConnection();
			pstmt = conn.prepareStatement(sbSql.toString());
			//填充占位符
			pstmt.setInt(1, pageNo * pageSize);
			pstmt.setInt(2, (pageNo-1)*pageSize);
			rs=pstmt.executeQuery();
			//泛型类型的
			List<User> userList = new ArrayList();
			//赋值,从哪开始查,查几个
			//返回多条,使用while循环
			while (rs.next()) {
				//创建一个用户对象
				User user=new User();
				user.setUserId(rs.getString("user_id"));
				user.setUserName(rs.getString("user_name"));
				user.setPassword(rs.getString("password"));
				user.setContactTel(rs.getString("contact_tel"));
				user.setEmail(rs.getString("email"));
				user.setCreateDate(rs.getTimestamp("create_date"));
				//将该对象放到相关list中,得到有记录的PageModel
				userList.add(user);				
			}
			//实例化PageModel,并获得list记录集,最后返回给jsp
			pageModel = new PageModel<User>();
			pageModel.setList(userList);
			pageModel.setTotalRecords(getTotalRecords(conn));
			pageModel.setPageSize(pageSize);
			pageModel.setPageNo(pageNo);
			
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DbUtil.close(rs);
			DbUtil.close(pstmt);
			DbUtil.close(conn);
		}
			
		return pageModel;
	}
     服务器业务逻辑部分已完成,接下来为:

4.将每页的数据输出到jsp

     在user_maint.jsp中调用刚才的findUserList,并循环迭代,引进用户user

<%
	int pageNo = 1;
	int pageSize = 2;
	String pageNoString = request.getParameter("pageNo");
	if(pageNoString != null){
		pageNo = Integer.parseInt(pageNoString);
	} 
	PageModel<User> pageModel = UserManager.getInstance().findUserList(pageNo,pageSize); 
%>

补充:

共*页(取得总记录数/每页多少个=总页数)

第几页

上一页

下一页

...自己去研究吧  哈哈


评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值