get&load方法的區別
代碼
輸出結果
由上面結果可以看出,使用get方法會立即執行一條查詢語句,并將查詢數據返回。
而load方法沒有執行查詢語句,是因為load方法的延遲查詢策略,只有在你用到數據的時候才會執行查詢。我們在load方法后添加一條語句,
總結:
????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方法會先查詢所有主鍵,拿著主鍵到緩存中找數據,如果沒有數據則查詢,否則直接從緩存中讀取數據。