欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
分頁(yè)技術(shù)及其實(shí)現

什么是分頁(yè)技術(shù)

分頁(yè),是一種將所有數據分段展示給用戶(hù)的技術(shù).用戶(hù)每次看到的不是全部數據,而是其中的一部分,如果在其中沒(méi)有找到自習自己想要的內容,用戶(hù)可以通過(guò)制定頁(yè)碼或是翻頁(yè)的方式轉換可見(jiàn)內容,直到找到自己想要的內容為止.其實(shí)這和我們閱讀書(shū)籍很類(lèi)似.

下頁(yè)顯示了兩種常見(jiàn)的分頁(yè)方式.


分頁(yè)的意義

分頁(yè)確實(shí)有效,但它一定會(huì )加大系統的復雜度,但可否不分頁(yè)呢?如果數據量少的話(huà)當然可以.但是對于企業(yè)信息系統來(lái)說(shuō)數據量不會(huì )限制在一個(gè)小范圍內.如果不顧一切的Select * from某個(gè)表,再將返回的數據一古腦的扔給客戶(hù),即使客戶(hù)能夠忍受成千上萬(wàn)足夠讓人眼花繚亂的表格式數據,繁忙的網(wǎng)絡(luò ),緊張的服務(wù)器也會(huì )提出它們無(wú)聲的抗議,甚至有時(shí)會(huì )以徹底的罷工作為終結.這個(gè)結局有點(diǎn)像古代為所欲為的暴君和他忍無(wú)可忍的臣民之間的故事.
程序員不是暴君,他希望程序使生活變得更好而不是更糟.考慮到企業(yè)信息系統多是三層甚至更多層架構的事實(shí),程序員在向客戶(hù)展示數據時(shí)都應該采取分頁(yè)的形式.如果他不想被抱怨淹沒(méi)或是半夜被電話(huà)驚醒的話(huà).

從請求發(fā)起到返回數據的整個(gè)過(guò)程

現在你已經(jīng)下定決心想要分頁(yè)了,在動(dòng)手書(shū)寫(xiě)代碼之前,先讓我們回想一下,在典型的三層架構中,從請求發(fā)起到返回數據的整個(gè)過(guò)程.如下所示:


在哪里進(jìn)行分頁(yè)

從上面的圖中我們可以觀(guān)察得知,在SQL語(yǔ)句處理完畢后,數據庫,WebApplication和Browser都能進(jìn)行分頁(yè),那在哪里分頁(yè)好呢?
判斷的標準是速度,顯而易見(jiàn),數據庫服務(wù)器,Web應用服務(wù)器和客戶(hù)端之間是網(wǎng)絡(luò ),如果網(wǎng)絡(luò )傳遞的數據量越少,則客戶(hù)端獲得響應的速度越快.而且一般來(lái)說(shuō),數據庫服務(wù)器和Web應用服務(wù)器的處理能力一般比客戶(hù)端要強很多.從這兩點(diǎn)來(lái)看,在客戶(hù)端分頁(yè)的方案是最不可取的.
其次就剩下了在Web服務(wù)器端分頁(yè)和在數據庫端分頁(yè)兩種方式了,如果選擇在Web服務(wù)器端分頁(yè)的話(huà),大部分的被過(guò)濾掉的數據還是被傳輸到了Web應用服務(wù)器端,與其這樣還不如直接在數據庫端進(jìn)行分頁(yè).

分頁(yè)的SQL語(yǔ)句

如果我們是通過(guò)JDBC的方式訪(fǎng)問(wèn)數據庫,那么就有必要根據數據庫類(lèi)型采取不同的SQL分頁(yè)語(yǔ)句,對于MySql數據庫,我們可以采用limit語(yǔ)句進(jìn)行分頁(yè),對于Oracle數據庫,我們可以采用rownum的方式進(jìn)行分頁(yè).

MySql的Limit m,n語(yǔ)句

Limit后的兩個(gè)參數中,參數m是起始下標,它從0開(kāi)始;參數n是返回的記錄數。我們需要分頁(yè)的話(huà)指定這兩個(gè)值即可.
如右是limit語(yǔ)句的一次應用,圖示的SQL語(yǔ)句返回報銷(xiāo)記錄表中第四,第五條報銷(xiāo)額度最大的記錄。


Oracle數據庫的rownum

在Oracle數據庫中,分頁(yè)方式?jīng)]有MySql這樣簡(jiǎn)單,它需要依靠rownum來(lái)實(shí)現.
Rownum表示一條記錄的行號,值得注意的是它在獲取每一行后才賦予.因此,想指定rownum的區間來(lái)取得分頁(yè)數據在一層查詢(xún)語(yǔ)句中是無(wú)法做到的,要分頁(yè)還要進(jìn)行一次查詢(xún).
右圖是分頁(yè)的具體示例,它從帳戶(hù)表中返回前十條記錄.


將兩種方案統合起來(lái)

實(shí)際上兩種方案的核心查詢(xún)語(yǔ)句,分頁(yè)的起點(diǎn)和終點(diǎn)都是一樣的,只是方言有所不同.如果將特殊的部分封裝起來(lái),對外置以統一的接口,這樣在轉換數據庫時(shí)更換被/* */屏蔽的部分即可.
下頁(yè)顯示了統合的函數.

List<BaseDomainObj> fetchPageRecords(int start,int end,String coreSql) throws CannotConnectToDBException,SQLException{
  StringBuffer sb
=new StringBuffer();
  
  
// 下面是Oracle的分頁(yè)
  /*sb.append(" Select                              ");
  sb.append("        *                            ");
  sb.append(" from                                ");
  sb.append("        (                            ");
  sb.append("         Select                      ");
  sb.append("                t01.*,               ");
  sb.append("                rownum as newRowNum  ");
  sb.append("         from                        ");
  sb.append("                (                    ");
  sb.append(coreSql);
  sb.append("                ) t01                ");
  sb.append("         where                       ");
  sb.append("                rownum<='"+end+"'    ");
  sb.append("        )                            ");
  sb.append(" where                               ");
  sb.append("        newRowNum>'"+start+"'        ");
*/

  
  
// 下面是MySql的分頁(yè)
  sb.append(coreSql+" limit "+start+","+end);
  
  String sql
=sb.toString();   
  
return search(sql);
}

 

Hibernate實(shí)現的分頁(yè)

如果使用Hibernate取代JDBC,那么上面這一步就不用我們自己費力了,Hiberate會(huì )根據方言的種類(lèi)選擇不同的方案,具體我們不必知道也不想知道,要分頁(yè)直接制定firstRow和maxRow即可,具體函數如下:

public List<T> findPageDatum(String hql,int firstRow,int maxRow){
      List
<T> result;
  
      Session session
=HibernateUtil.getSession();

      Query q 
= session.createQuery(hql);
      q.setFirstResult(firstRow);
      q.setMaxResults(maxRow);
      result 
=(List<T>) q.list(); 

      session.flush();
      HibernateUtil.closeSession(session);
      
      
return result;
}

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Hibernate 實(shí)現分頁(yè)查詢(xún)
Hibernate 高級查詢(xún)技巧
JAVA技巧:Java中的大量數據查詢(xún)
ORACLE中用ROWNUM分頁(yè)并排序的SQL語(yǔ)句
JSP分頁(yè)技術(shù)實(shí)現
ORACLE分頁(yè)查詢(xún)SQL語(yǔ)法——最高效的分頁(yè)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久