lazy loading實現

來源:互聯網
上載者:User

在進行O-R mapping時經常會碰到載入a graph of objects. 這是lazy loading應用的情境。你不想把所有資料庫中關聯的表對象都一次性load到記憶體吧?

 

可用的方法有:

1. lazy initialization

    簡單來說就是使用前判斷目標對象是否為null,是則真正從資料庫載入。缺點是非null時並不總是代表對象載入了。還有一個缺點是domain類中加入了調用資料庫的邏輯。

 

2. virtual proxy

    主要考慮one-many 關係,對應有一個List或者Set需要做lazy loading. 一般可以繼承List/Set, 並在繼承類中引用實際的List/Set 對象source(通過getSource() lazy loading)。繼承的任何List/Set介面比如size(),iterator(),都通過getSource()檢查是否已經初始化了,沒有的話再從資料庫中載入。

 

3. value holder

    通過getCollectionA()介面隱藏實現。getCollectionA實際上是從value holder中擷取目標Collection. value holder中封裝了是否初始化了目標,資料庫操作等。相對於第一中方法一個好處是資料庫操作封裝在value holder中,domain 類中不用關心了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.