ORM介绍

作者在 2008-04-12 13:48:44 发布以下内容

以下的ORM介绍来源网上(http://xclw.bokee.com/viewdiary.11582114.html)

ORM,即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。 
     
让我们从O/R开始。字母O起源于"对象"(Object),R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。

   
当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。

     用于O/R M开发的工具有很多.比如Hibernate(for java),NHibernate(for .NET),LLBLGen(for .NET 2.5).需要说明的是他们只是一种工具,一种技术.并不能代替编程语言本身.只是对编程起到辅助作用.从现在起,我们把这些工具和技术统称为O/R Mapper.

O/R Mapper 工作机制

     O/R Mapper 会根据数据库的结构创建一些对象类.数据库中的每一行(Row)变成了一个实体(Entity),每个表变成了一个实体集(Entity Collection).而每个字段就变成了实体类的一个公共属性(Public Propertity).O/R M框架同时还嵌入了一些方法,通过这些方法,你只需写很少的代码就能实现诸如查找对象,更改属性和把它们写回数据库等操作.

我们来看一下下面这个例子:

这里有两张表,分别名为Individual,AddressBook.可以看到这两张表之间存在着一定的关系.对如上的数据库结构,通过运行O/R Mapper,你会得到一个类库,然后就可把这个类库引用到你的项目里面.这样,你就可以通过如下的代码来处理数据库中的某一行:

1 //C# Example

2 IndividualEntity MyIndividual = new IndividualEntity(23);//通过IndividualID获取一条记录,并以一个实体的形式保存.

3 MyIndividual.FirstName = "Joe";//修改FirstName属性,相当于修改数据库中的FirstName字段

4 MyIndividual.AddressBook[0].City = "New York";//修改关系类的City属性,相当于修改City字段

5 MyIndividual.Save();//保存所做的修改到数据库中.

这就是此次操作数据库所用到的全部代码.除此之外你不需要再任何额外的代码.

许多在平时不得不手动输入的代码,现在全由O/R Mapper代劳了,比如:

    查找数据库服务器

    登录服务器并打开一个到数据库的连接

    查找正确的表

    查找正确的行

    读取这一行的值

    针对要处理每一个值,还要实现从数据库到编程语言的类型转换,其间还包括对Null值的处理

    以强类型的格式来呈现这些值,使我们在使用这些值的时候能确切的知道期望值的类型,以免在运行时出现异常

    在这些值被修改后,还要创建一个容器来临时存放它们

    获取另一行存放在关系表中的数据

    处理被修改的值,对适当的数据表执行一些Insert,Update,Delete操作以反映我们所作的修改

    关闭到数据库的连接

      微软自己的O/R Mapper

可能有的朋友传问了,既然O/R Mapping技术这么NB,为什么M$不在VS.NET中采用这种方法呢,为什么你介绍的O/R Mapper全是以第三方工具的身份出现呢?

    事实上,M$已经开始这方面的工作了,最初,M$开发了一个称为"ObjectSpace"的项目,这是一个用于描述关系数据模型的方法.这个项目最终被几个新项目所吸收,而这几个项目目前尚未完成.其中有一个项目叫作 WinFS,它所采用的技术与O/R Mapper十分相似.Quentin Clark--WinFS项目小组的负责人--在他的博客上这样说道:"我们已经着手开发ADO.NET的下一个版本了,它提供了一种新型的数据模型--对象关系映射(object-relation mapping)--并配有灵活的查询机制."

    M$的另一个重要项目叫做LINQ,Language INtegrate Queries(综合语言查询)的缩写.

    除了LINQ,M$的一个正在开发的项目叫做DLINQ.DLINQ着眼于关系数据,DLINQM$O/R Mapper,它能够根据数据库的表产生相应的类,并采用延期加载技术(Lazy loading)来动态产生SQL 语句用于获取,修改和删除数据.不过DLINQ还处于开发阶段,等到真正的投入使用,可能还需要一定的时间.

   不过,有个好消息是你不必等到M$DLINQ发行再使用O/R Mapper,你现在就可以使用LLBLGen Pro这一成熟,稳定的产品.

三层架构介绍

    编写过大型项目的XDJM们可能都知道合理组织代码的重要性.多层架构的设计理念可以把你的代码独立到逻辑层(Logic Layer).一般来说,一个项目中或多或少会用到数据存取层,业务逻辑层和用户界面层这三层结构.这里列出每一层的详细信息:

    数据存取层:这一部分包含了对数据库操作的一些必要代码.比如UPDATE,SELECT,INSERT,DELETE

ORM | 阅读 2776 次
文章评论,共0条
游客请输入验证码