国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Hibernate-list()與iterate()方法的區別

2019-11-14 21:42:26
字體:
來源:轉載
供稿:網友
Hibernate-list()與iterate()方法的區別

對于list方法而言,實際上Hibernate是通過一條Select SQL獲取所有的記錄。并將其讀出,填入到POJO中返回。而iterate 方法,則是首先通過一條Select SQL 獲取所有符合查詢條件的記錄的id,再對這個id 集合進行循環操作,通過單獨的Select SQL 取出每個id 所對應的記錄,之后填入POJO中返回。也就是說,對于list 操作,需要一條SQL 完成。而對于iterate 操作,需要n+1條SQL。看上去iterate方法似乎有些多余,但在不同的情況下確依然有其獨特的功效,如對海量數據的查詢,如果用list方法將結果集一次取出,內存的開銷可能無法承受。另一方面,對于我們現在的Cache機制而言,list方法將不會從Cache中讀取數據,它總是一次性從數據庫中直接讀出所有符合條件的記錄。而iterate 方法因為每次根據id獲取數據,這樣的實現機制也就為從Cache讀取數據提供了可能,hibernate首先會根據這個id 在本地Cache 內尋找對應的數據,如果沒找到,再去數據庫中檢索。

Query的兩個方法,list() 和 iterate() , 兩個方法都是把結果集列出來, 他們有3點不一樣,1:返回的類型不一樣,list()返回List, iterate()返回Iterator,2: 獲取數據的方式不一樣,list()會直接查數據庫, iterate()會先到數據庫中把id都取出來,然后真正要遍歷某個對象的時候先到緩存中找,如果找不到,以id為條件再發一條sql到數據庫,這樣如果緩存中沒有數據,則查詢數據庫的次數為n+1。

3:iterate會查詢2級緩存, list只會查詢一級緩存。4: list()中返回的List中每個對象都是原本的對象, iterate()中返回的對象是代理對象.(debug可以發現)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 诸暨市| 安宁市| 清原| 陵水| 永靖县| 海淀区| 龙陵县| 即墨市| 珠海市| 晋城| 左权县| 安多县| 绥滨县| 屏边| 泗洪县| 合江县| 阳城县| 湄潭县| 德江县| 余干县| 岳西县| 盈江县| 铜鼓县| 顺平县| 定安县| 昌黎县| 遵义市| 卓尼县| 汾阳市| 江阴市| 洛阳市| 凤庆县| 临洮县| 堆龙德庆县| 无锡市| 富裕县| 锦屏县| 鄂尔多斯市| 砀山县| 武城县| 大理市|