WEB开发网
开发学院软件开发Java 开源面向对象数据库 db4o 之旅,第 1 部分: 初识 ... 阅读

开源面向对象数据库 db4o 之旅,第 1 部分: 初识 db4o

 2010-04-01 00:00:00 来源:WEB开发网   
核心提示:前言业界对持久存储领域的追求从未停止过,为了更方便、更容易地用对象表达我们的思维,开源面向对象数据库 db4o 之旅,第 1 部分: 初识 db4o,开源领域和商业领域都涌现了许多新技术, ORM 的出现恰恰说明了这点,改变了 age 字段的名字或类型,将导致――上面所有的查询语句在运行时报错,最近一年,业界也在反思

前言

业界对持久存储领域的追求从未停止过,为了更方便、更容易地用对象表达我们的思维,开源领域和商业领域都涌现了许多新技术, ORM 的出现恰恰说明了这点。最近一年,业界也在反思,到底 ORM 给我们带来的是便利还是麻烦。矛头指向大名鼎鼎的 Hibernate ,纷纷议论其性能问题,大家似乎要达成这样的共识:“在业务逻辑复杂的地方用 SP ,而一般的 CRUD 还是 Hibernate ”,就连全球知名的 BearingPoint 也有类似看法。下面一个简单的例子,说明了传统 ORM 工具的弊端。让我们考虑一个简单的 Student 对象如清单1:

清单1. Student 类

public class Student { 
 private String name; 
 private int age; 
 public String getName(){ 
 return name; 
 } 
 public int getAge(){ 
 return age; 
 } 
} 

考虑下面这个场景:找到“年龄小于 20 岁的所有学生”?

使用 ORL 实现如清单2:

清单2. ORL 实现

String oql = "select * from student in AllStudents where student.age <20"; 
OQLQuery query = new OQLQuery(oql); 
Object students = query.execute(); 

使用 JDOQL 实现如清单3:

清单3. JDOQL 实现

Query query = persistenceManager.newQuery(Student.class, "age <20"); 
Collection students = (Collection)query.execute(); 

上面的方法都存在一些普遍问题:

现代集成开发环境不会检查内嵌字符串的语义和语法错误。在上面所有查询语句中, age 字段和数值 20 都被认为是数字类型,但是没有一个 IDE 或编译器能检查其实际正确性。如果开发者混淆了查询代码-―比如,改变了 age 字段的名字或类型,将导致――上面所有的查询语句在运行时报错,而不会在编译时提示。

1 2 3 4  下一页

Tags:开源 面向 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接