db4o中取前几条数据的问题

 在使用db4o做一个真实的项目的时候,遇到以下的问题

问题描述:

很多情况下,我们并不需要一次取出数据库的所有数据。比如说首页只是显示几条而已。而DB4o内置的3种查询方式似乎都没有方法解决。

问题解决:

这个情况不需要担心。因为DB4o是lazy load的

资料来源:感谢我群里认识的高手葡萄

xxp.秀 14:21:52
db4o有无获取前几条的语句?
 
xxp.秀 14:22:03
类似sql的 top 2这种
 
Pootow 14:22:21
不需要,Db4o的IObjectSet会自动Lazy-Load
Pootow 14:22:41
也就是说,你用哪些数据,那些数据才真正读出来。
xxp.秀 14:23:43
哦。。。我记得了,好像在配置文件有的配

 

Pootow 14:45:41
IList list = db.Get(null);//获取数据库里所有的对象
for(int i=0; i<5; ++i){
  Console.WriteLine(list[i]);
}
即使这样的代码,即使数据库里有1000K个对象,也可以瞬间完成。
告诉过你这个东西是LazyLoad了。
xxp.秀 21:51:07
那你的意思是说,IList list = db.Get(null),这句不会执行数据库操作?
Pootow 12:13:47
其实呢,这句话不完全是什么都不做,这句话会让Db4o把对象的id调入到内存里。对象本身并不读入内存。
Pootow 12:19:16
其实你从db4o数据库里取出来的对象并不是真正的你自己的对象,而是一个“动态代理”,db4o用反射动态生成一个代理继承自你的类,所有对你的类的调用实际上都是对代理的调用,代理精心重写了一些方法使得代理看起来是透明的。
Pootow 12:21:04
哦,补充一点,代理的创建是OC干的,从数据库读出你的对象也是OC干的,代理只是负责了解你的对象是否变化过,这样Set时候就有依据了。
Pootow 12:15:52
objectContainer.ext().getById(long id)似乎是这个函数吧,db4o当你读取一个对象的时候,他就知道你读取的对象的id,然后自动帮你调用这个函数取出真正的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值