对象持久化
何谓“持久化” 持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。除了 ORM 技术,还有以下几种持久化技术主动域对象模式、JDO 模式、CMP 模式。
一、对象-关系映射(ORM)
何谓“对象数据映射(ORM)” ORM-Object/Relational Mapper,即“对象-关系型数据映射组件”。对于O/R,即 Object(对象)和 Relational(关系型数据),表示必须同时使用面向对象和关系型数据进行开发。ORM解决的主要问题就是对象-关系的映射。一般情况下,一个持久化类和一个表对应,类的每个实例与表中的一条记录对应。
二、主动域对象模式
在它的实现中封装了关系数据模型和数据访问细节。在 J2EE 架构中,EJB 组件分为会话 EJB 和实体 EJB。会话 EJB 通常实现业务逻辑,而实体 EJB 表示业务实体。实体 EJB 又分为两种:由 EJB 本身管理持久化,即 BMP(Bean-Managed Persistence);由 EJB 容器管理持久化,即 CMP(Container-Managed Persistence)。BMP就是主动域对象模式的一个例子,BMP 表示由实体 EJB 自身管理数据访问细节。
主动域对象本身位于业务逻辑层,因此采用主动域对象模式时,整个应用仍然是三层应用结构,并没有从业务逻辑层分离出独立的持久化层。
优点:
1、在实体域对象中封装自身的数据访问细节,过程域对象完全负责业务逻辑,使程序结构更加清晰。
2、如果关系数据模型发生改变,只需修改主动域对象的代码,不需要修改过程域对象的业务方法。
缺点:
1、在实体域对象的实现中仍然包含SQL语句。
2、每个实体域对象都负责自身的数据访问实现。把这一职责分散、在多个对象中,这会导致实体域对象重复实现一些共同的数据访问操作,造成重复编码。
三、JDO 模式
Java Data Objects(JDO)是 SUN 公司制定的描述对象持久化语义的标准API。严格的说,JDO 并不是对象-关系映射接口,因为它支持把对象持久化到任意一种存储系统中,包括 关系数据库、面向对象的数据库、基于 XML 的数据库,以及其他专有存储系统。由于关系数据库是目前最流行的存储系统,许多 JDO 的实现都包含了对象-关系映射服务。
四、CMP 模式
在 J2EE 架构中,CMP(Container-Managed Persistence)表示由 EJB 容器来管理实体 EJB 的持久化,EJB 容器封装了对象-关系的映射及数据访问细节。CMP 和 ORM 的相似之处在于,两者都提供对象-关系映射服务,都把对象持久化的任务从业务逻辑中分离出来。区别在于 CMP 负责持久化实体 EJB 组件,而 ORM 负责持久化 POJO,它是普通的基于 Java Bean 形式的实体域对象。