lazy loading实现

在进行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 类中不用关心了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值