业务逻辑的代码和数据库的访问代码杂在一起,使程序结构不清晰,可读性差
在程序代码中嵌入面向关系的SQL语句,使开发人员不能完全运用面向对象的思想来编写程序
业务逻辑和关系数据模型绑定,如果关系数据模型发生变化,如:修改了表的结构,那么必须手动修改程序
中的代码和相关的SQL语句
为了使业务逻辑和数据库访问细节分离,在JAVA中已经出现下面模式:
ORM,主动域对象模式,JDO模式,CMP模式
对象关系映射的概念:
域模型和关系模型都是分别建立在概念模型的基础之上,域模型是面向对象的,而关系模型是面向关系的
一般情况下,一个持久化的类和一个表对应,类的每个实力对象对应表中的一条记录
对象持久化技术:
Session接口向业务逻辑层提供了读,写和删除域对象的方法,它不公开任何数据访问细节,SessionImpl实现了该接口
,SessionFactory类负责创建Session实例,Hibernate在初始化阶段把对象-关系映射文件中的映射元数据读入到SessionFactory的
缓存
主动域对象模式的优点:
BMP就是一个主动域对象模式,由EJB实现本身的访问细节, 在实体域对象中封装自身的数据访问细节,过程域对象完全负责逻辑,使程序结构更加清晰,
如果关系数据模型发生改变,只需要修改主动域对象的代码,不需要修改过程域对象的业务方法.
主动域对象的缺点:
在实体对象中仍然包含SQL语句,每个实体域对象都负责自身的数据访问实现,把这一职责分散到对个对象中,这会导致实体域对象重复实现一些共同的数据访问操作m
造成重复代码.
因为主动域对象本身是业务逻辑层,因此采用主动域对象模式时,整个应用仍然是三层结构,并没有从业务逻辑层分离出独立的持久化层
JDO(Java Data Objects)模式:
是SUN公司指定的描述对象持久化语义的标准API,因此,采用JDO模式时,整个应用为四层应用结构,表述层->业务逻辑层->JDO API,JDO实现,JDBC API,数据库层,
严格的说 JDO并不是对象-关系映射的接口,因为它支持把对象持久化到任意一种存储系统中,包括(关系数据库,面向对象的数据库,基于XML的数据库,其他专有存储系统)
EJB:
EJB容器封装了对象-关系映射及数据访问细节,CMP和ORM的相似在于,两者都提供对象-关系映射服务,都把对象持久化的任务从业务逻辑程序中分离出来,区别在于CMP持久化
实体EJB组件,ORM持久吧POJO(Plain Old Java Object(普通又古老的JAVA对象)),它是普通的基于Java Bean形式的实体域对象,

