J2EE (五) SQL+PageClass實現真分頁

來源:互聯網
上載者:User

          分頁的應用幾乎無處不在,只要有資料的地方就會用到分頁的技術,關於分頁已經有成熟的架構以及類庫並不需要我們親自些在自己的分頁類,通常用別人的已經開發好的東西,拿來開發效率會高一些,雖然如此,我們還需要掌握並瞭解分頁實現的原理和機制,下面給大家介紹一下,真分頁的實現。

           談到分頁在.NET裡面已經接觸過,學過一邊感覺再一次接觸會容易理解和運用,它們的實現思路和思想是一樣的,突然,對編程思想有了些認識,學習編程重要的並不是掌握多少語言,會多少語言,而是理解了編程的思想,如果你擁有了思想,編程是很輕鬆的事情。

           靜下心來寫一段代碼的時間遠比思考的過程要長,前幾天看翟鴻燊的視頻記得有一句話“思考力是在執行力前面的,只有思考沒有出現錯誤時,執行力才有價值”,在寫代碼的過程中同樣不可缺少思考力。

           真分頁即頁面上一次顯示多少條資料就從資料庫中查詢多少條資料,比如顯示80-90,資料庫裡面需要查詢的也是80到90條。

           我們如何從上萬條資料中查詢出某一連續幾條記錄呢?

           這裡涉及到兩個變數:每頁顯示條數和當前頁數。

           分頁SQL語句如下:user表

<-選擇多少條以上的資料->select rn, user_id,user_name,password,contact_Tel,email,create_date from  (     <-選擇多少條以內的資料->     select rownum rn, user_id,user_name,password,contact_Tel,email,create_date      from T_USER      where rownum <=?      order by user_id  )where rn>?

           查詢資料庫方法

      

/** * 查詢分頁資料 * @param pageNo 當前頁數 * @param pageSize 每頁大小 * @return */public PageModel<User> findUserList(int pageNo,int pageSize){//分頁用的SQL語句StringBuffer sbsql=new StringBuffer();sbsql.append("select rn,user_id,user_name,password,contact_Tel,email,create_date ");sbsql.append("from");sbsql.append("("); sbsql.append("select rownum rn, user_id,user_name,password,contact_Tel,email,create_date ");   sbsql.append("from");  sbsql.append("( select user_id,user_name,password,contact_Tel,email,create_date from T_USER where user_Id <> 'root'  order by user_id )");     sbsql.append("where rownum <=?");   sbsql.append(")"); sbsql.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.setEmail(rs.getString("email"));user.setCreateDate(rs.getTimestamp("create_date"));userlist.add(user);}//將結果分頁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;}

           分頁類封裝

  

/** * 封裝分頁類 * @author LLS * */public class PageModel<E> {//結果集private List<E> list;//查詢記錄數private int totalRecords;//每頁多少條資料private int pageSize;//第幾頁private int pageNo;/** * 取得首頁 * @return */public int getTopPage(){return 1;}/** * 取得尾頁 * @return */public int getBottomPageNo(){return getTotalPages();}/** * 取得上一頁 * @return */public int getPreviousPageNo(){if(pageNo<=1){return  1;}else{return pageNo-1;}}/** * 取得下一頁 * @return */public int getNextPageNo(){if(pageNo>=getBottomPageNo()){return getBottomPageNo();}else{return pageNo+1;}}/** * 得到總的頁數 * @return */public int getTotalPages(){return (totalRecords+pageSize-1)/2;}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;}}

         該分頁封裝返回的是實體集列表,也可以返回一些表對象,把資料匯入到表中。

         到這裡分頁的邏輯結構基本完成了,剩下的是一些前台的調用,只需要調用PageClass即可。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.