Hibernate14-get&load、list&iterate區別

get&load方法的區別
代碼


輸出結果

由上面結果可以看出,使用get方法會立即執行一條查詢語句,并將查詢數據返回。
而load方法沒有執行查詢語句,是因為load方法的延遲查詢策略,只有在你用到數據的時候才會執行查詢。我們在load方法后添加一條語句,
這樣我們就用到了這個對象,所有會執行一條SQL語句
來查詢數據,因為我們這里輸出了這個對象,所以會做輸出。
總結:
????get方法立即查詢,會立即向數據庫提交一條查詢語句,來查詢數據
????load方法延遲查詢,在你用到數據的時候才會提交sql語句進行查詢。

list&iterate區別
List方法是立即查詢,執行后發送sql語句到數據庫,執行查詢并返回結果。
Iteate方法是延遲查詢,會先執行一條SQL語句,只查詢主鍵那列,當你用到某條數據的時候,才會發送一條sql語句,來根據主鍵查詢數據。有的也叫n+1查詢,1指的是查詢所有主鍵的sql語句,n指的是根據主鍵查詢數據,iteate與load方法一樣,只有用到的時候才去查詢。
總結:
?????List雖然每次查詢都會發送SQL語句到數據,查詢數據,但是List會將查詢數據,寫入Session緩存。這也說明list方法是寫緩存,但是不讀取緩存,因為List方法每次都會查詢數據。
?????Iteate是,讀寫緩存,因為他只查詢一次,如果你先使用List了,在使用Iteate方法。Iteate方法會先查詢所有主鍵,拿著主鍵到緩存中找數據,如果沒有數據則查詢,否則直接從緩存中讀取數據。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優秀的...
    笨鳥慢飛閱讀 5,571評論 0 4
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,758評論 18 399
  • 這部分主要是開源Java EE框架方面的內容,包括Hibernate、MyBatis、Spring、Spring ...
    雜貨鋪老板閱讀 1,424評論 0 2
  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查詢集API 參...
    陽光小鎮少爺閱讀 3,852評論 0 8
  • 很多人把設計原則都想得很復雜,還別說,它真的挺復雜,但是對我來說它就是四點: ·清晰 ·流暢 ·統一 ·美觀 重要...
    昕火樂閱讀 530評論 0 0