zoukankan      html  css  js  c++  java
  • [drp 5] pageModel的建立,实现分页查询

    导读:之前做的分页,一直都是用的easy——UI分页,然后没有系统的整理过,就是知道传几个参数,然后云云。这次,从头到尾总结一下,了了我的这桩心愿。人事系统的重定向工作,一直刺激着我一定要总结总结这个分页。嗯,是这样的!


    一、建立分页Model类

    在这个类中,包含了几个基本的信息;总页数、总记录数、上一页、下一页、页容量等。这些配置,之前都是easy-UI 的一些属性,现在自己进行建立。这个类,在本篇博客中,没有用到。它的主要作用,在前台点击上一页、下一页、第一页、最后一页时获取参数值。

    <span style="font-family:KaiTi_GB2312;font-size:18px;">package com.angel.drp.util;
    
    import java.util.List;
    
    /**
     * 封装分页信息
     * @author AngelHHX
     *
     */
    public class PageModel<E> {
    
    	//结果集
    	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 getPreviousPageNo() {
    		if (pageNo <= 1) {
    			return 1;
    		}
    		return pageNo - 1;
    	}
    	
    	/**
    	 * 下一页
    	 * @return
    	 */
    	public int getNextPageNo() {
    		if (pageNo >= getBottomPageNo()) {
    			return getBottomPageNo();
    		}
    		return pageNo + 1;	
    	}
    	
    	/**
    	 * 取得尾页
    	 * @return
    	 */
    	public int getBottomPageNo() {
    		return getTotalPages();
    	}
    	
    	public List<E> getList() {
    		return list;
    	}
    
    	public void setList(List<E> list) {
    		this.list = list;
    	}
    
    	public int getTotalRecords() {
    		return totalRecords;
    	}
    
    	public void setTotalRecords(int totalRecords) {
    		this.totalRecords = totalRecords;
    	}
    
    	public int getPageSize() {
    		return pageSize;
    	}
    
    	public void setPageSize(int pageSize) {
    		this.pageSize = pageSize;
    	}
    
    	public int getPageNo() {
    		return pageNo;
    	}
    
    	public void setPageNo(int pageNo) {
    		this.pageNo = pageNo;
    	}
    }
    </span>

    二、实现分页查询

    <span style="font-family:KaiTi_GB2312;font-size:18px;">/**
    	 * 分页查询
    	 * @param pageNo 第几页
    	 * @param pageSize 每页多少条数据
    	 * @return
    	 */
    	public PageModel<User> fundUserList(int pageNo,int pageSize){
    		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<User>();
    		
    			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.setCreateDate(rs.getTimestamp("create_date"));
    				user.setEmail(rs.getString("email"));
    				userList.add(user);
    			}
    			pageModel =new PageModel<User>();
    			pageModel.setList(userList);
    			pageModel.setTotalRecords(getTotalRecords(conn));
    			pageModel.setPageNo(pageNo);
    			pageModel.setPageSize(pageSize);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally{
    			DbUtil.close(rs);
    			DbUtil.close(pstmt);
    			DbUtil.close(conn);
    		}
    		return pageModel;
    	}</span>

    要点:主要是三层SQL语句的嵌套。最里边的一层:select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id <> 'root' order by user_id 是从表中获取需要的数据;第二层:则是用rownum 给查询出来的数据编号;最外边的一层,则是根据传过来的参数,选择合适编号的数据。

    这样子,在前台,只需要传过来第几页和页容量就行了。


    三、总结和重定向的思考

    在人事系统中,所用到的修改重定向或是添加重定向,都可以从这个分页查询中,窥探出一二来,最开始的时候,是因为对这个分页的逻辑不明白,一旦明白了这一点,就显得比较容易了。

    如果要进行重定向(编辑),那么应该有以下几个要点;

    1,获取目前的总记录数;2,获取当前记录在数据库中所在的位置;3,获取页容量。那么根据分页的逻辑和算法,可以得出:总页数,当前记录所在的页码。这样子,就可以进行重定向了。下面是获取当前记录的所在位置代码:

    <span style="font-family:KaiTi_GB2312;font-size:18px;">select num from(
    		SELECT
    			row_number () OVER (
    
    				ORDER BY
    					[排序字段] DESC
    			) AS num ,*
    		FROM
    			[表单名称] p
    		WHERE
    			p.state = 'T') x where [当前记录的限制字段]=[字段值]</span>


  • 相关阅读:
    在网络中传输数据(I)
    WinForm DataGrid 中在 DataGridBoolColumn 的列标题上加一个 CheckBox 实现全选和全不选
    datagrid 相关
    Agile Framework视频演示发布
    asp.net(含:模拟登陆,照片列表)
    会计电算化常考题目一
    jquery实例教学一
    ASP .net(照片列表详细功能CRUD演示)
    会计电算化常考题目
    ASP.NET(get和post比较)
  • 原文地址:https://www.cnblogs.com/hhx626/p/6010339.html
Copyright © 2011-2022 走看看