關於Hibernate的load和get方法的區別,網上一抓一大片。不過,也許是版本的不一樣,感受網上的文章有其謬誤。何況,說二者區別的文章一大片,但幾近沒有文章談及什麼時候使用這兩方法合適。
程序員
網上流傳較廣的說法之一是:load比get效率高。理由是:load比較聰明,會先從一、2級緩存中找數據,找不到再從數據庫中查詢;而get則是個笨蛋,無論三七二十一,直接查數據庫。
數據庫
也許老版本是這樣,實際上,我用Hibernate3.6測試發現,get也會從緩存中找數據。因此,在查詢方面,我認爲二者間的效率並沒有甚差別——想一想也該明白,若是load真比get全方位的優勝,那get還有存在的意義麼?早就被Hibernate開發組的人淘汰了。
緩存
那麼,load和get到底有什麼區別——或者說,他們各自應用在什麼地方?
測試
我以爲,他們倆之間的關係就像是單例模式中的懶漢式和餓漢式——若是要取的數據很少,而且肯定必定會用到,那麼直接拿過來就好;反過來,若是要查的數據不必定被用到,並且數據量較大,耗費資源較多,那咱們就應該使用load延遲加載,即在真正要用的時候再來查詢數據。
資源
網上的文章大多都列了好多load和get的不一樣之處的條目,這裏就再也不贅述了——優秀的程序員從不幹重複低價值的勞動,嘿嘿。
開發