学习日记

正在关注 Linux 、开源的个人博客。

首页 | 留言本 | 标签云 | 网站地图 | 美味书签 | Learning Diary | 登录 |

DAO

2004年11月25日 下午 1:52 | 作者:andjia

DAO-数据访问对象(Data Access Object),是将业务逻辑层与持久性数据层解耦的一个集成层模式,它处理与持久性数据(关系数据库、面向对象数据库、纯文件、集成时遇到的遗产或者异类系统)的事务性交互,生成VO-值对象(Value Object)并将其返回给业务逻辑层。这样,业务逻辑层就不需要了解持久性数据的具体操作,而是直接操作值对象。(JSP页面里不会再有Connection conn = DriverManager.getConnection……什么的了)

这样,DAO模式中的四个参与角色就很明白了:

业务对象Business Object

数据访问对象Data Access Object

数据源Data Source

值对象Value Object

DAO模式实际上是一种代理模式,使对象(资源)的访问具有间接性,分类资源层和其他层客户端,如业务层或者表示层。

一个典型的 DAO 实现有以下组件:

一个 DAO 工厂类

一个 DAO 接口

一个实现了 DAO 接口的具体类

数据传输对象(有时称为值对象)

具体的 DAO 类包含访问特定数据源的数据的逻辑。

以上是从Core J2EE Patterns书中DAO一节以及一些网上资料中摘录的,Hibernate作为一个ORM的实现,分离出了持久层的操作,所以也是DAO模式。参照DAO的基本组件构架和“与猫同乐”的那个简单的例子,来分析一下Hibernate的基本构架和关键类。

DAO接口:net.sf.hibernate.Session接口,获取实例的方法SessionFactory.openSession();

Session接口是Hibernate应用的主要接口,一个Session实例是轻量级的,可以轻易的创建和销毁,由于应用程序在调用Hibernate时,会经常性的创建和销毁Session实例,所以Session实例必须是轻量级的。同时,Session不是线程安全的,一个session能并只能被一个线程调用。

Session处理对象的各种持久性操作,如存储、重新载入等,ses.save(princess);

DAO工厂类:net.sf.hibernate.SessionFactory类,生成方法

sessionFactory = new Configuration().configure().buildSessionFactory();

由于Hibernate的配置信息存放在xml里,所以由一个net.sf.hibernate.cfg.Configuration类来完成配置,它的configure()方法将读取hibernate.cfg.xml里的内容,Configuration是使用Hibernate需要的第一个类,以后使用的SessionFactory和Session等多为接口。具体的配置过程参见Configuration类的protected Configuration doConfigure(org.dom4j.Document doc) throws HibernateException;方法。

SessionFactory接口向应用程序提供Session实例,SessionFactory不是轻量级的,所以最好被所有的应用共享,通常为每个数据源创建一个SessionFactory。SessionFactory会处理各个ORM配置XML(Cat.hbm.xml),在它的实现类的构造函数里就载入所有的Mapping配置,见net.sf.hibernate.impl.SessionFactoryImpl的构造函数。

版权所有。转载时必须以链接形式注明作者和原始出处及本声明。

相关日记

随机日记

添加到网摘

[del.icio.us]  [新浪 VIVI]  [365key]  [YouNote]  [博采中心]  [Poco]  [SOHU狐摘]  [天极网摘]  [和讯网摘] 

评论(1条评论)

  1. learndiaryV0.9的DAO很笨拙,我要认真学习一下andjia这篇日记。

发表评论

*必填

*必填 (不会被公开)


Copyright © 2004-2008 www.learndiary.com(学习日记)
Powered by WordPress with theme by UCDCHINA for Blogool come from JunChen Wu, nowa
联系版主:mdx-xx at tom dot com。2004.7.25