面向对象数据库存在很大的局限性,一直没有得到普及,而且很难移植到别的数据库上,因此在市场还不是主流的数据库产品。
目前大量使用的一般是关系数据库,关系数据库存放的是关系数据,是非面向对象的,这样就存在互不匹配的现象。
对象和关系数据其实是业务实体的两种表现形式。
只不过在不同地方表现的形式不同,在内存中表现为对象,而在对象数据库中用关系数据的形式存储。
是对象,就有关联和继承等关系,而在关系数据库中,是表的形式存放数据,无法表现对象之间的继承等关系。
由此看来要使用关系数据库作为存储机制意味着数据在对象模型和关系模型之间要实现转换。
即使用关系数据库存储持久化对象时需要进行“对象/关系映射”(Object/Relation Mapping,简称ORM)。
通过对象/关系映射,持久层自动将对象映射到关系数据库,使底层的数据库对开发者透明,使开发者只关注业务实体,从而减轻负担,提高开发效率。
另外,在实际应用中,特别是大型的应用系统中,除了反复需要把内存中的对象持久化存储到数据库并进行增加,删除,修改等业务之外,还需要把数据库中的数据重新加载到内存中,满足用户对数据的各种操作需要。
如此频繁的访问数据库对数据库的性能影响很大,使操作很慢或者耗费大量内存。
为了降低对数据库的访问频率,可以把经常需要被访问的数据存放在缓存中,并通过特定的机制来保证缓存中的数据与数据库中的数据同步。
大连交通人学一I:学硕十学位论文 在Java领域访问数据库有这几种方式13l: (1)在业务逻辑类中直接访问关系数据库。
这种方式优点是速度快,缺点是明显的不利于维护和扩展而且只适用于小型系统。
(2)代码中通过调用JDBC API实现。
这种方式直接,较之前有较大的改进,但是编码量大,可维护性差。
而且对程序员要求很高。
(3)在持久化层加入持久化的中间件,使用这样的中间件之后既可以解决对象/关系之间不匹配的问题,又解决对数据库频繁访问的
问题。
研究现状 为了使关系数据库和Java语言有效的结合起来,SUN公司为Java制定了数据库规范,JDBC API就是杰出的代表,此后随着企业级应用的增加,又发表了EJB(EnterpriseJava Bean)规范,以及为了解决EJB中实体Bean对数据重量级封装的JDO(Java DataObject)规范。
目前,已经有很多JDO的实现,如Top Link,OJB,Liberator JDO,CasterJDO,TriActive JDO等等。
此外,还有如Hibemate之类的开源的对象/关系映射工具。
持久化方式主要有以下三种|4l: (1)JDBC API JDBC(Java Data Base Connection)即Java数据库联接,是用来执行SQL语句的Java API,它由一组用Java编写的类和接口组成。
JDBC为工具/数据库开发人员提供了一组标准的API,大大简化了应用软件和数据库相连的复杂度。
有了JDBC,连接各种关系数据库,向数据库发送SQL语句就是一件很简单的事情了。
就是说,使用了JDBCAPI,不必为访问Sybase专门写一个程序,为访问Oracle数据库专门写一个程序,为访问Informix数据库又写另一个程序等。
只需要用JDBC API写一个程序即可,它可向相应的数据库发送SQL语句。
这样就使不同数据库对于开发者来说一直很方便。
但是使用JDBC API存在繁琐的代码问题。
一个简单的查询操作,如果A对象的属性有上百个,就要写上百条语句,就很容易出错。
对于另外的对象B,同样的操作,也需要些上百条代码,这大大增加了代码检测的难度。
对于大型的企业的应用,对需要向数据库大量操作的系统,大量的重复编写对数据库操作的代码,导致大量的人力,物力,财力都浪费在这种重复的对数据库开发中,而数据库操作,也正是项目开发中容易出错和浪费大量时间的部分。
如果在同一个项目对应不同的数据库,需要为每个数据库重写相对应的数据访问层。
显然,对于每个项目都重复具有相同模式的代码是一种极大的浪费。
同时JDBC容易造成整体机构上层次划分不清晰,耦合性强,维护上困难等等一系列问题,并而安全性,事务控制等等都需要软件开发者进行控制和管理,不能充分发挥 绪论应用服务器的特性。
JDBC需要再次封装,如使用Session Bean,DAO(Data Access Objec0等模式等才能解决这一列弊端。
(2)EJB中的Entity Bean(实体Bean) 使用EJB就能像搭积木一样开发EJB组件,然后你或者别的开发人员可以把着这些EJB组件组装或重组到不同的应用中去。
例如,你可以创建了一个Customerbean,它表示数据库中一个顾客,这个Customerbean就能用在多个