一:在
JAVA
领域,数据存取技术有多种。
1、 Jdbc
。用
JAVA
实现关系数据库存取的基础。优点:直接和数据库关联,存取速度快,支持多数据库,细粒度存取。缺点:不支持面向对象存取。在应用程序中,要嵌套复杂
SQL
命令,事务性语句硬编码到程序中,不便以后维护。程序开发复杂。
2、 EntityEJB
。
Sun J2EE
框架的重量级持久层数据存取技术。优点:可支持简单(无法支持继承,多态)面向对象设计,标准的。支持分布式处理。透明持久。容器管理。缺点:一个
EntityEJB
组件需要复杂复杂接口,
remote/local
接口与其实现之间无法保证编译时的一致性。性能问题。开发周期长。
3、 Jdo
。轻量级持久框架。优点:
o/r mapping
实现,全面支持面向对象设计。弥补
EntityEJB
的不足。用
Java
对象取得和保存数据库中的数据。标准的。透明持久。容器管理。缺点:只支持本地调用,缺乏移植性。
4、 Hibernate
。开源轻量级实现的持久框架。优点:
o/r mapping
实现,灵活配置。基于普通
java
对象实现持久。对
JDBC
的轻量级封装实现。支持复杂对象结构。缺点:只支持本地调用,缺乏移植性。
二:
DAO
设计模式应用。
由于数据存储介质(数据源如,文件系统、关系数据库、
LDAP
、其他应用程序等)多样,企业应用程序中,常常涉及多个存储介质间的数据存取。为减少企业应用程序的复杂性,持久层框架设计便出现。持久层主要目的:在一逻辑层上,抽象数据的持久,使客户层无须知道底层具体的存储介质,所有针对某个存储介质的数据存取都在持久层封装并实现。其强大之处在于,可以抽象基础存储介质的实现。
Jdo
、
Hibernate,EntityEJB
都是持久层实现技术,不同之处在于,支持存储介质多少,面向对象存储程度,事务管理,灵活性,存取性能等。
象
jdo,hibernate
轻量级框架完全支持面向对象持久,似乎,业务逻辑层可以直接和持久层接触。由于业务逻辑层复杂,业务对象并不需要知道在某一业务过程中,持久层的逻辑(即:持久层是如何存取数据的)。我们用
DAO
模式,分离业务逻辑层和持久层,使业务对象存取数据时,只要调用具体
DAO
的存取方法(
CRUD
),方法的实现由具体
DAO
实现处理,业务对象不关心实现细节。其主要优点:
1
、完全分离持久层逻辑和业务逻辑层。
2
、为业务层提供抽象接口,具体数据存取由
DAO
实现层实现,从而,抽象实现细节。
3
、
DAO
模式配合
Service Locator
模式,实现数据的缓存等,处理程序性能问题。
4
、统一处理持久层的抛出异常。
5
、处理性能、事务等问题。
6
、具体
DAO
实现,可解决数据访问的粒度问题。
在复杂项目中,使用
DAO
模式完全分离业务层,和持久层,既:数据库
>>
持久框架
>>DAO>>
业务层。
选择
EntityEJB
持久实现时,由于
CMP
容器带来的透明性,事务管理等特性,简单项目中,可不用
DAO
模式。涉及多数据源的复杂项目中,用
DAO
模式分离业务逻辑和持久层,可增强系统灵活性,和可维护性。
选择轻量级持久框架,其面向对象数据存取技术,透明的持久,在某中程度上可减少业务对象对数据层的了解。在仅有简单逻辑的小项目中,可不用
DAO
模式,以减少层,提高性能。在有复杂逻辑的项目中,用
DAO
模式,清晰的分离逻辑层,持久层,可带来维护上的好处。
用
JDBC
实现数据存取时,使用
DAO
模式完全抽象数据源。隐藏具体数据库存取。但要在实现中维护事务,锁处理,主键生成,性能等问题。
在具体应用过程中,
DAO
模式,可配合工厂模式,或抽象工厂模式,工厂抽象多个数据源,并生产多个具体的
DAO
对象。
DAO
对象为业务对象提供具体的存取数据逻辑。