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,然后自动帮你调用这个函数取出真正的对象。

你可能感兴趣的:(sql,ext)