`
blues1021
  • 浏览: 136755 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

DAO模式与ORM概念

    博客分类:
  • SSH
阅读更多

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是一种工具,工具确实能解决一些重复,简单的劳动但我们不能指望工具能一劳永逸的解决所有问题,有

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

分享到:
评论

相关推荐

    支持多数据库的ORM框架ef-orm.zip

    例如:数据库查询条件的传入问题是所有ORM框架都不能回避的一个问题,所以我经常在想——既然我们可以用向DAO传入一个Entity来实现插入操作,为什么就不能用同样的方法来描述一个不以主键为条件的update/select/...

    se Java 设计架构

    第六章 设计模式的概念与几种常用的J2EE设计模式 第一节 设计模式的概念………………………………………25 第二节 工厂创建模式与单例模式……………………………27 第三节 使用工厂模式实现DAO ……………………...

    NHibernate in Action by Christian Bauer

    第一章描述了一个场景,解释什么是持久层以及如何使它适用于商业应用。...本章还介绍了一个通用Helper类:DAO模式。最后,我们还介绍了web应用程序session的管理,展示如何进行长期的商业项目和如何实施分布式应用。

    Java Web程序设计教程

    13.1spring对dao模式的支持 260 13.1.1统一的数据访问异常 260 13.1.2通用的数据访问模板及抽象支持类 261 13.2spring的jdbc 262 13.2.1为什么需要jdbctemplate 262 13.2.2通过jdbcdaosupport使用jdbctemplate...

    Spring面试题

    BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 ☆ Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如...

    Spring面试题大全

    而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现C放入IoC的容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联。 四、Spring对多种ORM框架...

    Yii2中文手册(中文教程完整版)

    编撰中 数据访问对象(DAO) - 数据库连接、基本查询、事务和模式操作 编撰中 查询生成器(Query Builder) - 使用简单抽象层查询数据库 编撰中 活动记录(Active Record) - 活动记录对象关系映射(ORM),检索和...

    Hibernate实战(第2版 中文高清版)

     1.2.4 与关联相关的问题   1.2.5 数据导航的问题   1.2.6 不匹配的代价   1.3 持久层和其他层 显示全部信息第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   ...

    最新Java面试宝典pdf版

    13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托方案怎么配置? 123 16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有...

    Java面试宝典2010版

    13、在DAO中如何体现DAO设计模式? 14、spring+Hibernate中委托方案怎么配置? 15、spring+Hibernate中委托方案怎么配置? 16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类...

    Java面试笔试资料大全

    13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托方案怎么配置? 123 16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有...

    JAVA面试宝典2010

    13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托方案怎么配置? 123 16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有...

    Java面试宝典-经典

    13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托方案怎么配置? 123 16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有...

    java面试题大全(2012版)

    13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托方案怎么配置? 123 16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有...

    Java面试宝典2012版

    13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托方案怎么配置? 123 16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集...

    java面试宝典2012

    13、在DAO中如何体现DAO设计模式? 134 14、spring+Hibernate中委托方案怎么配置? 134 15、spring+Hibernate中委托方案怎么配置? 134 16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有...

    Java面试宝典2012新版

    13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托方案怎么配置? 123 16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有...

    Spring中文帮助文档

    12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 SessionFactory 12.2.3. The HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. ...

Global site tag (gtag.js) - Google Analytics