• 分页查询


        分页查询事实上和其它的没什么差别。主要差别在一个地方,就是查询语句不通。分页查询可能比較麻烦一点,以下来说一下该怎样实现我们的分页查询功能:

    一、代码展示
        1、封装分页实体PageModel,保存一些分页查询的基本信息
        /**
         * 封装分页信息
         */</span>
        public class PageModel {
            //结果集</span>
            private List list;
            //查询记录数</span>
            private int totalRecords;
            //每页多少条数据</span>
            private int pageSize;
            //第几页</span>
            private int pageNo;
            
            //总页数</span>
            public int getTotalPages(){    
                return (totalRecords+pageSize-1)/pageSize;
            }
            //取得首页</span>
            public int getTopPageNo(){
                return 1;
            }
            //取得尾页</span>
            public int getButtomPageNo(){
                return getTotalPages();
            }
            //上一页</span>
            public int getPreviousPageNo(){
                if (pageNo<=1){
                    return 1;
                }
                return pageNo-1;
            }
            
            //下一页</span>
            public int getNextPageNo(){
                if (pageNo>= getTotalPages()){
                    return getTotalPages();
                }
                return pageNo+1;
            }
            
            public List getList() {
                return list;
            }
            public void setList(List 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>
      2、编写分页查询方法
    /**
         * 分页查询
         * @param pageNo 第几页
         * @param pageSize 每页多少条数据
         * @return pageMode
         */
        public PageModel findUserList(int pageNo,int pageSize){
            //利用StringBuffer存放分页查询语句
             StringBuffer sbSql=new StringBuffer();
            sbSql.append("select user_id,user_name,password,contract_tel,email,create_date ")
                .append("from ")
                .append("( ")
                .append("select ROWNUM rn,user_id,user_name,password,contract_tel,email,create_date ")
                .append("from")
                .append("( ")
                .append("select * from T_USER where USER_ID<>'root' ORDER BY USER_ID ")
                .append(") where ROWNUM <= ? ")
                .append(") where rn > ? ");
    
             //创建Connection对象和PreparedStatement对象
            Connection conn=null;
            PreparedStatement pstmt=null;
             //创建ResultSet存放查询结果
            ResultSet rs=null;
            PageModel 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 userList=new ArrayList();     
                
                  //处理查询结果
                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("CONTRACT_TEL"));
                    user.setEmail(rs.getString("EMAIL"));
                    user.setCreateDate(rs.getTimestamp("CREATE_DATE"));
                    userList.add(user);
                }
                pageModel=new PageModel();
                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);
            }
             //返回分页查询结果pageModel
            return pageModel;
        }
        public int getTotalRecords(Connection conn) throws SQLException {
            String sql="select count(*) from t_user where user_id <> 'root'";
            PreparedStatement pstmt=null;
            ResultSet rs=null;
            int count=0;
            try{
                pstmt=conn.prepareStatement(sql);
                rs=pstmt.executeQuery();
                rs.next();
                count=rs.getInt(1);
            }finally{
                DbUtil.close(rs);
                DbUtil.close(pstmt);
            }
            return count;
        }  

    二、功能分析
            综合上面的东西,事实上分页查询本质上就是一个查询语句的事:
           第三部分表3--開始
             select user_id,user_name,password,contract_tel,email,create_date from
    (  
        第二部分表2--開始
    select ROWNUM rn,user_id,user_name,password,contract_tel,email,create_date from
    (
            第一部分表1---開始
    select * from T_USER where USER_ID<>'root' ORDER BY USER_ID
                    第一部分表1---结束
    )where ROWNUM <= pageNo * pageSize
       第二部分表2--结束
    ) where rn > (pageNo-1)*pageSize
    第三部分表3--结束
        

    三、总结:由上面可知,分页查询事实上就是表的嵌套查询。第一步:先将要查询的内容查出来,如第一部分;第二步:在去掉大于最大记录的那部分记录。如第二部分。第三步:在将小于最小记录的那部分去掉,如第三部分。

    掐头去尾。剩下的正好是我们所须要的分页查询数据。



  • 相关阅读:
    python常用包收集
    python pep 8
    常用python字符串处理
    安全资源整理
    WordPress下载安装简单配置实例
    PHP框架学习之Laravel基本功能
    PHP框架学习之Laravel安装
    PHP面试题之优化
    PHP面试题之小杂鱼
    PHP面试题之文件目录操作
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7136915.html
Copyright © 2020-2023  润新知