面向 Java 开发人员的 db4o 指南: 结构化对象和集合
2010-04-01 00:00:00 来源:WEB开发网跟本系列早先的探察测试示例一样,在每次测试完成后,我使用带 @After 注释的 deleteDatabase() 方法来删除数据库,以使各部分能够很好地分隔开。
让我们运行几个查询……
在实际运行这个方法之前,我将会检查在系统中使用 Employee 会有哪些效果(如果有的话)。希望从数据库获取所有 Employee 信息,这很正常 — 或许当公司破产时他们将会全部被解雇(是的,我知道,这样想很残酷,但我只是对 2001 年的 dot-bomb 事故还有点心有余悸)。最初的测试看起来很简单,正如清单 4 所示:
清单 4. Ted 说,“你被解雇了!”
@Test public void testSimpleInheritanceQueries()
{
ObjectSet employees = db.get(Employee.class);
while (employees.hasNext())
System.out.println("Found " + employees.next());
}
当进行测试时,将会产生一个有趣的结果:数据库(我自己、Ben、Neal、Brian 和 Bruce)中只返回了 Employee。OODBMS 识别出查询受到子类型 Employee 的显式约束,并且只选择了符合返回条件的对象。因为其他对象(配偶或者孩子)不属于 Employee 类型,他们不符合条件,所以没有被返回。
当运行一个返回所有 Person 的查询时,将会更加有趣,如下所示:
清单 5. 找到所有人!
@Test public void testSimpleNonEmployeeQuery()
{
ObjectSet persons = db.get(Person.class);
while (persons.hasNext())
System.out.println("Found " + persons.next());
}
当运行这个查询时,每个单一对象 — 包括以前返回的所有 Employee — 都被返回了。从某种程度上说,这是有意义的。因为 Employee 是一个 Person,由于建立在 Java 代码中的实现继承关系,因此满足返回查询的必须条件。
更多精彩
赞助商链接