Topic: 哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢

  Print this page

1.哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 Copy to clipboard
Posted by: ajinjin
Posted on: 2003-09-21 15:07

都能说出来的想来也是大虾级的了,先恭维一下哈

2.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: jameszhang
Posted on: 2003-09-21 17:40

期末考试

3.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: auauau
Posted on: 2003-09-23 00:30

呵呵。。。。。。

4.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: helloworld
Posted on: 2003-09-23 09:17

关注!

偶不是CTO.

5.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: jacob1
Posted on: 2003-09-23 12:06

郁闷,偶考试老是不及格,所以这些概念还有待调查啊,汗...

6.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: scottding
Posted on: 2003-09-26 11:23

DAO和ADO以前在使用Delphi开发项目的时候用过。现在在Java中,最热的莫过于JDO,Hibernate,OJB了,,不过,我想对于JDO大家听说的比较多一点,因为这个是SUN公司本土支持的,现在快加入规范了吧。他们都是一种O/R Mapping的映射工具,现在的功能也是越来越强大。最近Hibernate也是越来越热,我没有是用过,看过一些介绍,现在国内也专门有了Hibernate的中文网站,在一些论坛上也能够看到相关的贴子,对于OJB,我觉得大家提的比较少一点,我曾经用过,虽然时间不是很长,但是我喜欢这个。曾经跟一个朋友讲个这个,他个人认为这个东东是非常不错的,而且,在他周围的很多人都在使用这个,只是网上的讨论比较的少见罢了。
这些工具的使用都是为了实现一个数据库到对象的映射,体现一个OO的原则,或者说OO的优势,真正实现对象的操作,无需去关心琐碎的数据库的操作。

7.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: scottding
Posted on: 2003-09-26 11:25

OJB简介
对象关系桥(OJB)是一种对象关系映射工具,它能够完成从Java对象到关系数据库的透明存储。

灵活性:

OJB给用户提供了多种存储API,让用户有很多选择:
1. 提供完全的ODMG3.0 API
2. 完全的JDO API。我们现在提供了JDO RI的一个插件,JDO RI与插件结合提供了一个 完整的基于JDO1。0的O/R解决方案

3. 提供一个JDO和ODMG的公共对象事务管理层(OTM)
4. 一个作为OJB存取核心的底层API PersistenceBroker。OTM,ODMG和JDO都是在该API的基础上实现的

可缩放性:

OJB可以广泛地用于应用程序,从嵌入式系统到胖客户端到基于J2EE的多层架构

1. 单独模式(单虚拟机模式),OJB的PersistenceBroker和客户端运行在同一个Java虚拟机上。适合于仅仅一个客户端的程序(如在本地的数据库程序,或单服务Servlet,EJB应用程序)。该模式为缺省模式。

2. C/S模式。支持在不同物理机器上的多个虚拟机同时运行多个客户端和多个PersistenceBroker服务。适合于典型的C/S程序,或是应用服务器的负载平衡。详情可参考C/S 导学。

强大的功能性:
OJB使用基于XML的对象关系映射。映射发生在一个动态的元数据层,使得可以通过一个简单的元对象协议(MOP)在运行时就可以操作元数据层去改变存储内核。

OJB提供了高级的O/R,如对象缓冲,通过虚拟代理实现后期实例化,配置事务隔离层实现分布式的锁管理,同时支持多种锁管理。

OJB与J2EE应用服务器进行了很好的集成。支持数据源的JNDI查找;与JTA和JCA全面集成;能够在JSPs,Servlet和SessionBeans中使用;OJB也为实体Bean管理Bean(BMP)提供了特别的支持。

OJB提供了良好的可配置性,和集成机制,允许用户使用预定义的组件或是自己实现扩展组件

8.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: scottding
Posted on: 2003-09-26 11:30

“为什么Hibernate如此成功!”
http://hibernate.bluemars.net/38.html
这篇文章是Gavin King写的,非常有趣,充分体现了Hibernate的设计理念,我粗略的意译如下:

下面是对Hibernate开发工作的个人想法,正是这些工作使得Hibernate如此迅速的得到广泛的欢迎。

1、飞快的版本发布
保持活跃的开发速度,经常进行版本发布,甚至几天之内就从前一个版本开发到下一个版本。这样是保证软件远离Bug的最好的办法,也可以让用户感到很放心,确信Hibernate的开发十分活跃,另外这样做也有一大好处,就是可以发现哪些功能是用户真正需要的。

2、回归测试
我想现在整个Java社区一定都很重视自动回归测试。如果软件的功能和设计有比较大的修改,那么一个综合性的test suite对于软件可维护性和稳定性来说实在是太重要了。我们应该有这样的意识:如果对软件的一个新功能没有进行回归测试,我们根本就不该去做它。

3、把一个功能做到最好
要么不做,要做,就一定做到最好。那些我们做不到最好的功能,我们根本不去做,扔给其他软件去做吧。

4、避免过度设计
浪费大量的时间和精力进行软件功能的抽象和扩充软件的灵活性,还不如多花点时间来解决你的用户面临的实际问题呢!简单一点! 软件能跑起来就OK,不要尝试去解决你的用户根本不关心的问题。就算你的软件设计的不够优雅也没有关系,反正还是initial阶段嘛!以后再refactor,你应该关注的问题是及时的把有用的功能给做出来。

5、集权
在你需要由民主投票来下决定之前,至少你已经把软件轮廓做好了。软件开发需要由一两个开明的人来领导,这样可以保证软件开发的连贯性而不至于产生太大的分歧,可以保证开发团队集中火力把要实现的功能做到最好。我觉得,OSS软件最大的风险就是意见不统一,摊子铺的太大,结果最后搞的什么都没有做好。

(译者按:非常赞同,凡是成功的OSS软件,都是在某个牛人已经把软件做好了之后,发布出来,然后由大家往里面添加功能的,并且在牛人的领导下不断进步。缺乏牛人的OSS软件都不算很成功,比如Mozilla)

6、文档
没有什么比文档更重要的了。如果你的用户不知道你的软件有这么一个功能,就等于没有这个功能,干脆把它去掉得了,省得给源代码增加复杂度。

7、避免标准化
好的标准可以带来软件的互用性和可移植性,坏的标准能够窒息软件创新!“支持XXX标准”根本就不是真实的用户需求,特别是当这个XXX标准是那些在其位不谋其政“所谓”的专家委员会制订出来的。(译者按:莫非指Sun,IBM等几个big name?) 最好的软件是在不断的尝试,不断的出错,不断的经验积累的过程中产生的。 (原文最后一句不解其意,没有译出来)

8、10分钟之内把Hibernate跑起来
潜在的Hibernate的用户在他们下载了Hibernate,第一次使用的时候根本就不可能花半个小时那么多时间来安装、配置和troubleshooting,他们早就丧失了对Hibernate的兴趣了。我们的口号就是新用户(假设有足够的JDBC知识)5分钟之内把Hibernate的Demo跑起来,而他们能够在1个小时之内写出“Hello World”式的最简单的Hibernate程序并且正常运行。

9、开发人员的责任感
用户总是不可避免的碰到问题,开发团队有责任有义务提供帮助。用户让我们知道了文档的漏洞,用户让我们知道了测试用例的小bug。此外,没有用户来用我们的Hibernate,我们还开发它做什么,不是浪费时间吗!

有个关于bug的笑话:用户根本不介意发现新功能的bug(译者按:Windows的用户好像都是如此),只要你能迅速的改掉bug。“责任感”意味着bug修复应该在1周之内。从收到bug报告到bug修复代码提交到CVS上要做到平均在24小时左右,这才是一个理想的目标。

10、易用的、可更新的wiki网页
(译者按:wiki是Hibernate网站用的一个web发布框架)

9.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: scottding
Posted on: 2003-09-26 11:37

Java 数据对象(JDO)介绍
介绍
Java 数据对象 (JDO) is 是一个存储Java对象的规范. 它已经被JCP组织定义成JSR12规范。JDO的第一个版本在2000年6月6日提交并在2002年4月30日正式发布1.0版本规范。
规范的两个主要目的是提供数据处理和访问机制的API以及允许规范的实现作为应用服务器的一部分。

JDO 和 JDBC
JDBC和JDO都是Java调用数据库的APIs。区别在于,他们访问数据存储的具体方法不同。JDBC提供了一种非常好的机制,它可以使应用程序代码与具体的数据库厂商和数据库位置无关。在大多数情况下数据存储使用的是关系数据库。但是当使用JDBC驱动运行在一个非关系数据库时就不是很好了。而对于JDO来说,运行在它之下的数据库就可以是一个关系数据库,面向对象的数据库或者其他完全不同的数据库。在JDO运行于关系数据库之上时,它可以通过JDBC很好的完成数据存储。而这一切对于开发人员来说都是透明的,所有实现都有JDO本身来完成。

JDBC不支持面向对象的数据库表示。JDBC数据库表示完全围绕关系数据库模型。这常常导致书写代码时在应用程序和数据库之间存在一个中间层。这个层的作用也许是分解Java对象。分解Java对象的过程会对使用的对象稍作改变,这样对象才能存储到关系数据库之中。同样的必须存在一种机制来把数据库中的记录转换成适当的Java对象。JDO与JDBC刚好相反,他的数据库标示完全面向对象。这种机制并不新奇,在一些面向对象数据库中已经使用了这种机制。
JDBC的查询语言一般都是用SQL。JDO的查询语言看起来与Java更接近。使用JDO无需再专门学习一种查询语言比如SQL。如果你会用Java那么你就能够使用JDO的查询语言。

执行
JDO规范定义了JDO实现的接口已经JDO实现的内容。SUN提供了一个JDO规范的参考实现,但是在2002年5月份发布的版本中它并没有完全实现规范中所要求的内容。还有众多的厂商提供的JDO实现可以使用。

API
javax.jdo.spi.PersistenceCapable
任何被JDO实现控制的类都必须扩展PersistenceCapable接口。任何扩展PersistenceCapable接口的类的实例都可以看作是一个“JDO实例”。这个接口定义了JDO实现使用的方法来控制类的实例。

public abstract javax.jdo.PersistenceManager jdoGetPersistenceManager();
public abstract void jdoReplaceStateManager(javax.jdo.spi.StateManager)
throws SecurityException;
public abstract void jdoProvideField(int);
public abstract void jdoProvideFields(int[]);
public abstract void jdoReplaceField(int);
public abstract void jdoReplaceFields(int[]);
public abstract void jdoReplaceFlags();
public abstract void jdoCopyFields(Object, int[]);
public abstract void jdoMakeDirty(String);
public abstract Object jdoGetObjectId();
public abstract Object jdoGetTransactionalObjectId();
public abstract boolean jdoIsDirty();
public abstract boolean jdoIsTransactional();
public abstract boolean jdoIsPersistent();
public abstract boolean jdoIsNew();
public abstract boolean jdoIsDeleted();
public abstract javax.jdo.spi.PersistenceCapable
jdoNewInstance(javax.jdo.spi.StateManager);
public abstract javax.jdo.spi.PersistenceCapable
jdoNewInstance(javax.jdo.spi.StateManager, Object);
public abstract Object jdoNewObjectIdInstance();
public abstract Object jdoNewObjectIdInstance(String);
public abstract void jdoCopyKeyFieldsToObjectId(Object);
public abstract void jdoCopyKeyFieldsToObjectId(
javax.jdo.spi.PersistenceCapable.ObjectIdFieldSupplier, Object);
public abstract void jdoCopyKeyFieldsFromObjectId(
javax.jdo.spi.PersistenceCapable.ObjectIdFieldConsumer, Object);

通常会有一个由JDO实现厂商提供的工具来完成普通的Java类到“JDO实例”类的转化。这个工具可能通过不同的方法来实现。第一种方法是通过字节码增强器来实现。一个JDO字节码增强器把普通的Java类转换成“JDO实例”类的过程就是把扩展PersistenceCapable接口的方法的代码加到类中。第二种方法是使用一个代码生成器,它解析现有的普通Java代码然后输出一个扩展了PersistenceCapable接口的新版本的代码。如果通过手工方式来扩展这个接口是没有好处的。

javax.jdo.PersistenceManagerFactory
PersistenceManagerFactory接口 被用来获得一个PersistenceManager 实例。这个接口中定义两个工厂方法(有关工厂方法的内容可以参考Java设计模式)。

public PersistenceManager getPersistenceManager()
public PersistenceManager getPersistenceManager(String userid,
String password)

Because PersistenceManagerFactory is an interface, some vendor specific class, which implements this interface, must be used as a bootstrap mechanism. This should turn out to be the only vendor specific code that a JDO application uses. Because of this, the JDO specification suggests that an application level factory class be implemented which returns the appropriate instance of the PersistenceManagerFactory so that implementations may be swapped out with minimal impact on application code. Only the application's factory would need to be modified in this case.
因为PersistenceManagerFactory 是一个接口,一些实现该接口的厂商特定的类必须通过一种“自举”机制来使用。

// SolarMetric's 实现PersistenceManagerFactory 接口的例子...
PersistenceManagerFactory managerFactory =
new com.solarmetric.kodo.impl.jdbc.JDBCPersistenceManagerFactory();

// 获得一个控制器 manager...
PersistenceManager manager = managerFactory.getPersistenceManager();

javax.jdo.PersistenceManager
The PersistenceManager interface is the primary point of contact between a Java application and the JDO implementation. Application code uses a PersistenceManager to retrieve Java objects from the data store and to add Java objects to the data store. The PersistenceManager interface also serves as a factory for several other JDO components discussed below.
PersistenceManager 接口是连接Java应用程序和JDO实现的要点。应用程序使用PersistenceManager 从数据存储中获得对象或者把一个Java对象放到数据存储中。PersistenceManager 接口也为下面将要讨论的几个JDO组件提供服务。

PersistenceManager 接口中定义了几个方法来把JDO实例对象添加到数据存储中。

public abstract void makePersistent(Object);
public abstract void makePersistentAll(Object[]);
public abstract void makePersistentAll(java.util.Collection);

通过下面几个方法实现把JDO实例对象添加到数据存储中的过程:

// 获得一个 manager...
PersistenceManager manager = managerFactory.getPersistenceManager();

// 下面的 Employee 必须扩展了 PersistenceCapable...
Employee newEmployee = new Employee(...);
manager.makePersistent(newEmployee);

javax.jdo.Extent

Extent (范围)对象表示所有的在当前数据库中实际的类对象。在PersistenceManager 中的一个工厂方法负责获得一个Extent (范围)对象。

public Extent getExtent(Class persistenceCapableClass, boolean subclasses)

Class参数标明了接收的对象类型。boolean 参数标明是否包含第一个参数指定的类的子类。

Extent 接口定义了一个iterator()方法,它返回一个 java.util.Iterator来遍历所有由Extent 描述的实例。

//获得一个 manager...
PersistenceManager manager = managerFactory.getPersistenceManager();

// the Employee class must implement PersistenceCapable...
Extent employeesExtent = manager.getExtent(Employee.class, false);
java.util.Iterator iterator = employeesExtent.iterator();

javax.jdo.Query
Query 接口允许从数据存储中获得符合某些条件的实例。Query 实例可以重载自PersistenceManager 接口中的newQuery()方法获得。
Query 接口定义了几个不同版本的重载execute() 的方法,这些方法将执行查询(Query) 并返回匹配的结果。

// 获得一个 manager...
PersistenceManager manager = managerFactory.getPersistenceManager();

// Employee 类必须实现 PersistenceCapable接口...
Extent employeesExtent = manager.getExtent(Employee.class, false);

// 一个Query 获得所有在公司工作五年以上的 Employees....
Query query = manager.newQuery(Employee.class, employeesExtent,
"yearsOfEmployement > 5");

// 执行查询Query...
Collection employees = (Collection) query.execute();

// 处理结果...
Iterator iterator = employees.iterator();
while (iterator.hasNext()) {
Employee employee = (Employee) iterator.next();
(...)
}

注意newQuery()方法的第三个参数"yearsOfEmployement > 5"。它标明了返回结果的条件。上面的实现要求Employee 类中必须有一个属性字段叫yearsOfEmployment 。

10.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: scottding
Posted on: 2003-09-26 11:57

ADO是一套COM(Component Object Model组件对象模型)组件(DLLs),它允许你像访问电子邮件和文件系统一样访问数据库。使用ADO编写的应用程序不需要BDE。为了用ADO访问各种数据库,你需要有ADO/OLE DB(Object Linking and Embedding对象链接和嵌入)库。使用ADO所需要的可能在你的计算机中已存在:这些文件被微软作为Windows98/2000的一部分分发。如果你使用的是Windows95或NT,你可能需要分发或安装ADO引擎。Delphi 5的CD中包含有MDAC-Microsoft Data Access Components(微软数据访问组件)的安装文件。你应该确定使用的是MDAC的最新版本,它可以从微软的官方网站获得。MDAC是使Universal Data Access(通用数据访问)起作用的关键技术。它们包括ActiveX Data Objects(ADO)、OLE DB和Open Database Connectivity(ODBC)。
ADO编程模型围绕着几个ADO对象而建立,这些对象为访问各种数据员提供多种方法。这些对象提供连接数据源、查询和更新记录集、报告错误的功能。

11.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: scottding
Posted on: 2003-09-26 12:05

DAO 已经很老了。。以前在搞VB的时候曾经是用过,,,我想现在应该没有多少人用它了吧。。。

12.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: scottding] Copy to clipboard
Posted by: think
Posted on: 2003-09-26 12:45

scottding说得不错。
大致补充一些.Net下的相关技术。

DAO好像是Data Access Object,是ADO以前的技术。

ADO是在DAO和另外一种远程数据访问技术的基础上发展起来的。类似JDBC。
另外Borland有BDE和dbExpress等技术。

不过现在.Net平台上使用的是ADO.Net技术,提供DataReader和DataSet,分别支持前滚和断连数据集,后者是ADO.Net的一个技术亮点。
.Net平台同时提供大量的数据访问控件,绑定到ADO.Net上,从而实现基于数据集的快速开发,包括WinForm和WebForm的开发。
关于断连数据集技术,JDBC中的RowSet技术可以与之对应,但是不像.Net平台做了广泛的支持。

同时微软正在开发基于.Net平台的数据持久技术——Object Spaces,正处于测试阶段。此技术类似JDO、OJB和Hibernate等,用于实现内存对象模型和关系模型间的映射。另外好像已有了一种.Net Persistence技术,不过了解不多。

13.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: jinbo
Posted on: 2003-09-26 16:20

ajinjin问的DAO不是指MS的Data Access Object,而是指Sun Core Pattern中的一个模式。

14.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: scottding
Posted on: 2003-09-26 16:50

抱歉,,看来是我忽视了这个,一直没有注意java的DAO
惭愧惭愧,,

持久性框架

何谓持久性框架
持久性框架是一组软件服务,将应用程序与其使用和操纵的数据源分离。持久性框架位于机构的数据源之上,隐藏访问这些数据源的数据访问API(如JDBC,JDO或实体EJB)。提供的服务应完全抽象和从这个数据源使用和操纵数据的物理细节。
注:持久性框架就是DAO及其隐藏的对数据源的访问机制。

持久性框架中提供下列服务,让开发人员在持久性框架之上建立应用程序:

l 提供分开数据持久逻辑与表示和业务逻辑的整洁机制
在上面的体系结构框图中,只有业务层可以访问公司数据库。业务层用Data Access Object模式与公司数据库交互,而不用JDBC之类的数据访问API访问数据源。

l 不让框架上建立的应用程序了解数据所在的数据库平台
将所有数据连接逻辑包装到数据访问对象中后,业务应用程序的开发人员不需要知道连接的数据库平台类型,连接数据库时所需的任何安全信息(用户ID与口令)或数据库网址。

l 抽象数据库中存储数据的物理细节和数据库中数据实体之间存在的关系
建立在上述体系结构布局之上的应用程序不必直接对数据库发出SQL查询,不必知道数据的物理结构,而用数值对象访问数据库。

l 简化开发过程,隐藏打开数据库连接、发出数据读取与操纵命令和事物管理的细节
Data Access Object与Value Object模式完全分离业务应用程序的开发人员与其在应用程序中使用的数据源,不需要知道数据访问API,而用简单接口读取与操纵数据。

DAO模式很强大,因为:
l 它抽象数据源读取数据的方法。DAO模式可以用任何Java数据访问API进行处理,包括:
1. JDBC API — JDBC是第一个标准数据库访问API,位于J2EE中,是J2SE的扩展。
2. SQLJ — SQLJ是较新的API,是几个一流的数据库和Java应用程序服务器厂家提出的。SQLJ使开发人员可以把SQL代码直接嵌入Java代码中,然后用代码预处理器将其转换成Java代码。
3. 实体EJB — 实体EJB规范是数据持久性规范,开发人员可以抽象组件体系结构中的数据库代码。
4. Java Data Object(JDO) — JDO规范是最新的数据库访问API,可以用标准Java对象取得和保存数据库中的数据。JDO对象比实体EJB简单,同时仍然提供与实体EJB相似的功能。
l 整洁分离业务与数据逻辑,减少应用程序开发人员混合业务与数据逻辑的情形。把所有数据访问代码集中到一个逻辑结构之中,开发人员可以用逻辑接口读取与操纵数据。
l 提供一组标准编程接口,可以解决常见数据库开发问题,包括:
1. 主键生成
2. 并发性管理与锁
3. 事务管理
4. 性能问题

O/R Mapping技术
对于Java有许多持久化对象的方式。我们也非常关注Java应用程序的持久层。我将介绍一些著名的持久框架。本文将关注开源的O/R Mapping工具hibernate。
l JDBC
许多开发者用JDBC进行数据库程序的开发。此中方式很多情况下都使用DAO模式,采用SQL进行查询。虽然用此方式可以使应用程序代码与具体的数据库厂商和数据库位置无关,不过JDBC是低级别的数据库访问方式,JDBC并不支持面向对象的数据库表示。JDBC数据库表示完全围绕关系数据库模型。在大型应用程序中的DAO中书写这样的代码,维护量是非常大的。
l EJB
EJB通常是程序员的第二个选择,目的是更加规范的用持久对象对数据库访问。Entity EJB听起来就象银弹一样,因此它拥有了巨大的市场。然而,你必须去了解一个EJB容器,甚至花大价钱去购买。而且想要非常清楚的了解EJB规范也是非常费时的。在用EJB编码前,先要让专家理解API,然后需要了解每一个容器部署时所要关注的技术。此外,许多情况下商用容器的性能和支持也不是很好。
l JDO
4月JDO规范1.0提出可以使你将精力集中在设计Java对象模型,然后在企业应用软件架构的不同层面中存储传统的Java对象(Plain Old Java Objects,简称POJOs),采用JDOQL语言进行SQL操作。一些公司(包括sun)企图根据JDO规范进行设计并实现JDO产品,然而他们都不能很好的进行实现。并且性能优化上比较差。
l ibatis
很多人对此可能非常不熟悉。ibatis是一个轻量级的持久层开发框架。目的也是提高持久层的设计与实现。它有二个核心组件SQL Maps和DAO,减少了JDBC代码并且抽象持久性实现细节。SQL Maps还将JavaBean映射到xml和sql中。对于关联表和执行复杂的查询不需要复杂的scheme。
下图为ibatis架构的描述:

l 其他持久性框架
下列框架不再介绍。其中TopLink是商用框架。Castor,OJB是值得关注的架构,尤其是后者。Cocobase,expresso相对比较大,但也值得关注。
Infobjects ObjectDRIVER- http://www.infobjects.com
LiDO - http://www.libelis.com
InterSystems Cache - http://www.intersystems.com
SimpleOrm - http://www.SimpleOrm.org
VBSF - http://www.objectmatter.com
The ProductivityEnvironmentForJava (PE:J) - http://www.hywy.com/
JDX - http://www.softwaretree.com
Cayenne - http://objectstyle.org/cayenne/
TopLink - http://otn.oracle.com/products/ias/toplink/content.html
EnterpriseObjectsFramework - http://www.apple.com/webobjects/
Jakarta ObjectRelationalBridge - http://jakarta.apache.org/ojb
Castor - http://castor.exolab.org
Jaxor - http://jaxor.sourceforge.net
Cocobase - http://www.thoughtinc.com
Expresso - http://www.jcorporate.com
DataBind - http://databind.sourceforge.net
JdoGenie - http://www.hemtech.co.za/jdo
Abra - http://abra.sourceforge.net
KodoJdo - http://www.solarmetric.com/Software/Kodo_JDO/
Persistence EdgeXtend - http://www.persistence.com/products/edgextend/
FrontierSuite for J2EE & J2SE - http://www.objectfrontier.com
FrontierSuite for JDO - http://www.objectfrontier.com
BasicWebLib - http://basicportal.sourceforge.net/

hibernate
Hibernate使你可以用Java机制开发持久对象 — 包括关联,继承,组合和Java集合框架。 HQL是一个简化的对SQL的在OO机制上的扩展,在对象和关系数据库间提供一个桥的作用。Hibernate现在是Java世界中比较流行的ORM解决方案。
提供HQL语言;透明持久性;复杂的ORM;简单但强大的API;自动PK生成;O/R Mapping定义;双层cache架构;高性能;J2EE集成,对JMX,JCA等技术的支持;详细文档;开源软件的支持。。。等等特性。

15.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: ajinjin
Posted on: 2003-09-27 14:46

哥哥,ADO好像是Abstrct Data Object哈

16.Re:哪位gg给系统解释一下DAO,JDO,ADO,hibernate,ojb的概念,以及各自的优缺点呢 [Re: ajinjin] Copy to clipboard
Posted by: ajinjin
Posted on: 2003-09-27 14:48

DAO好像是Data Access Object,不要跑题哈


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923