講解Hibernate query語句
Hibernate還是比較常用的,于是我研究了一下Hibernate query語句,在這里拿出來和大家分享一下,希望對大家有用。
今天要在sqlserver環境下做一個簡單的增刪改功能,要用到分頁,開始直接用oracle數據庫環境一直用的一個jdbc重構過的類處理,發現不行,才想起oracle和sqlserver的分頁sql語句寫法是很不一樣的,于是打算google一下,緊接又想,何不先看看Hibernate在sqlserver環境是怎么處理分頁的(我這里用的是Hibernate 3.0)。
先把Hibernate配置文件的show_sql改成true,啟動tomcat,在項目原來的一個功能里找到一個翻頁的地方,比如每頁顯示兩條,***頁的時候,Hibernate query語句是:SELECT TOP 2 * FROM …… 恩,對的,看來Hibernate還比較聰明,***頁直接用top語句,可是點下一頁,當查詢的記錄應是3-4條時,Hibernate query語句是: SELECT TOP 4 * FROM…… 不理解了,難道Hibernate這么笨嗎,如果我要查的是第100萬條到100萬零10條的記錄,難道他也是先把這100萬零10條全部查出來嗎?
但是我測試的結果就是如果我要去第5000頁的數據,他就是select top 10000 * from ……這樣取出來的。但是如果把sql dialect 改成oracle,處理是用 rownum 直接去取需要的中間那么多條記錄的。明天升級到***的Hibernate 3.3試試看會不會這樣。難道java的開源框架對sql server這么感冒? 呵呵
監控了下數據庫,發現公司的php程序在翻頁時也是這樣處理的,我就奇怪了,sql server2005中也有rownum概念的啊。看來代碼從sql server2000到2005以后還是要做一些優化的
【編輯推薦】