1. 程式人生 > >hibernate中hql語句中list和iterate區別

hibernate中hql語句中list和iterate區別

每次 hibernate 寫入 所有 讀取 條件 iter 查詢 hql

1.使用list()方法獲取查詢結果,每次發出一條語句,獲取全部數據。
2.使用iterate()方法獲取查詢結果,先發出一條SQL語句用來查詢滿足條件數據的id,然後依次按照這些id查詢記錄,也就是要執行N+1條SQL語句(N為符合條件的記錄數)


兩次執行list()方法,每次執行都是發出一條SQL語句,查詢所有數據。
下面看看兩次執行iterate()方法的輸出情況
兩次執行iterate()方法,第一次執行時發出了N+1條SQL語句,而第二次執行,則只發出一套SQL語句,與先執行list()方法後執行iterate()方法時一致。這種情況產生的原因是因為Hibernate的緩存
1.list()方法將不會在緩存中讀取數據,它總是一次性的從數據庫中直接查詢符合條件的數據,同時將獲取的數據寫入緩存。
2.iterate()方法則是獲取了符合條件的數據的id後,首先根據id在緩存中尋找符合條件的數據,若緩存中無符合條件的數據,再到數據庫中查詢

hibernate中hql語句中list和iterate區別