DAO模式与ORM概念

DAO模式:在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。
DAO模式是标准的J2EE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开.一个典型的DAO实现有下列几个组件:
  1. 一个DAO工厂类;   
2. 一个DAO接口;  
 3. 一个实现DAO接口的具体类;   
4. 数据传递对象(有些时候叫做值对象).   
具体的DAO类包含了从特定的数据源访问数据的逻辑。在下面的这段中你将学到设计和实现数据访问对象的技术。   
事务划分:   
关于DAO要记住的一件重要事情是它们是事务性对象。每个被DAO执行的操作(象创建,更新、或删除数据)都是和事务相关联的。同样的,事务划分(transaction demarcation)的概念是特别重要的。   
事务划分是在事务界定定义中的方式。
J2EE规范为事务划分描述了两种模式:编程性事务(programmatic)和声明性事务(declarative).
下表是对这两种模式的拆分:   
声明性事务划分 : 程序员使用EJB的布署描述符声明事务属性
编程性事务划分 : 程序员担负编写事务逻辑代码的责任。  
 运行时环境(EJB容器)使用这些属性来自动的管理事务。 应用程序通过一个API接口来控制事务

ORM概念:
让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息。
ORM的方法论基于三个核心原则:
 · 简单:以最基本的形式建模数据。
 · 传达性:数据库结构被任何人都能理解的语言文档化。
 · 精确性:基于数据模型创建正确标准化了的结构。
ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。
一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。
ORM 映射规则的定义:
staticvoidMain(string[]args){
MyStudentstu1=newMyStudent();
stu1.Name="刘德华";
stu1.Age=40;//通过反射的方法来动态获取此映射规则
PropertyInfo[]infos=stu1.GetType().GetProperties();
object []objs_fieldAttr=null;
foreach(PropertyInfoinfoininfos) {//GetCustomAttributes:
//返回实体对象中每个属性对应的“特性”信息(数据库字段名、类型)
objs_fieldAttr=info.GetCustomAttributes(typeof(DataFieldAttribute),false);
if(objs_fieldAttr!=null){
Console.Write("实体类的属性名:"+info.Name);
Console.Write("->数据库字段名:");
Console.WriteLine(((DataFieldAttribute)objs_fieldAttr[0]).FieldName);
}
}
}
通过ORM中的(若为hibernate SessionFactory 通过**.hbm.xml产生Session对其操作持久化。
也可通过Spring的org.springframework.orm.hibernate3.support.HibernateDaoSupport;
利用Dao的方式对数据持久化封装操作。
但是ORM和DAO产生的缺点是:
1.从系统结构上来看,采用ORM的系统一般都是多层系统,系统的层次多了,效率就会降低。
2.如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和加工处理,这样就容易产生性能问题。
3.在对对象做持久化时,ORM一般会持久化所有的属性,有时,这是不希望的。
4.但ORM是一种工具,工具确实能解决一些重复,简单的劳动但我们不能指望工具能一劳永逸的解决所有问题,有

些问题还是需要特殊处理的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值