一、ORM框架指的是对象、关系、映射
而ORM框架主要分为Hibernate(Nhibernate),iBATIS,mybatis,EclipseLink,JFinal这五种
ORM方法论基于三个核心原则:
- 简单性:以最基本的形式建模数据。
- 传达性:数据库结构被任何人都能理解的语言文档化。
- 精确性:基于数据模型创建正确标准化了的结构。
二、ORM优缺点
优点:
提高开发效率,降低开发成本
使开发更加对象化
可移植
可以很方便地引入数据缓存之类的附加功能
缺点:
自动化进行关系数据库的映射需要消耗系统性能。其实这里的性能消耗还好啦,一般来说都可以忽略之。
在处理多表联查、where条件复杂之类的查询时,ORM的语法会变得复杂。
三、ORM框架形式
1.EF(Entity framework)实体框架:ado.net一组支持开发面向数据的软件应用程序的技术。微软的一个ORM框架
其实在上图中我们可以看出来使用了ORM的框架,使用的是强制类型,不容易出现错误,直接实现了由表实体到表的操作,而没有使用的ORM框架,我们需要数据库访问驱动层,Ado.NET操作数据,是一种弱类型的操作,非常容易出现错误。其实ORM框架的底层代码也是ADO.NET,只不过这些代码是封装好了的,直接可以被用户使用,非常方便!
2.linq to sql
其实在ORM框架除了EF映射,还有linq to sql,注意到这一块是因为在vs中创建EF映射的下面还有一个叫做linq to sql,其实这也是一种ORM的框架,只是适用于一些轻型的,小的ORM适用;感兴趣的可以尝试一下!相关访问博文:http://www.cnblogs.com/yukaizhao/archive/2010/05/13/linq_to_sql_1.html
3.CYQ.Data 自动化编程框架
这个框架其实也是在EF的原理基础之上通过改编形成的一种ORM框架,详情请看:
http://www.cnblogs.com/cyq1162/p/5634414.html
4. NHibernate
NHibernate是一个面向.NET环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。所以NHibernate与Entity
Framework是很相近的。
其实在敲ssh商城的时候我就一直遇到一个名词:数据持久化,当时一直不太明白到底是什么意思,后来在学习这一块基础的时候发现:数据持久化(PO)就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称.数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。cmp和Hibernate只是对象模型到关系模型之间转换的不同实现。
四、广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。
狭义上,ORM可以被认为是,基于关系型数据库的数据储存,实现一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面向对象的接口,持久化一个ORM对象应该不需要了解任何关系型数据库存储数据的实现细节。
ORM思想其实就是表实体和表之间的相互转化。
五、
数据持久化
ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。
这种方案存在以下不足:
1. 持久化层缺乏弹性。一旦出现业务需求的变更,就必须修改持久化层的接口
2 持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾的相关程序代码,增加了软件的维护难度。
ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁。Java典型的ORM中间件有:Hibernate,ibatis,speedframework。
数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。
狭义的理解,持久化仅仅是指把对象数据永久保存在数据库中,数据在计算机中一般由两个存储地,内存为暂存,数据库可以理解为永存;广义的理解,持久化包括和数据库相关的各种操作,封装了数据访问细节,为大部分业务逻辑提供面向对象的API。
数据持久化好处:
松散耦合,程序代码重用性强,使持久化不依赖于底层数据库和上层业务逻辑实现,更换数据库时只需修改配置文件而不用修改代码。
业务逻辑代码可读性强,在代码中不会有大量的SQL语言,提高程序的可读性。
持久化技术可以自动优化,以减少对数据库的访问量,提高程序运行效率
数据持久化对象的基本操作有:保存、更新、删除、查询等。
由此可知,数据持久层也就是与数据交互的那一层次,所以有时候有见到ORM框架介绍:是一个数据持久层(ORM)框架
六、
一般的ORM包括以下四部分:
- 一个对持久类对象进行CRUD操作的API;
- 一个语言或API用来规定与类和类属性相关的查询;
- 一个规定mapping metadata的工具;
- 一种技术可以让ORM的实现同事务对象一起进行dirty checking, lazy association fetching以及其他的优化操作。
目前流行的 ORM 产品
Java系列:
- Apache OJB
- Cayenne
- Jaxor
- Hibernate
- iBatis
- jRelationalFramework
- mirage
- SMYLE
- TopLink
其中 TopLink 是 Oracle 的商业产品,其他均为开源项目。 其中 Hibernate 的轻量级 ORM 模型逐步确立了在 Java ORM 架构中领导地位,甚至取代复杂而又繁琐的 EJB 模型而成为事实上的 Java ORM 工业标准。而且其中的许多设计均被 J2EE 标准组织吸纳而成为最新 EJB 3.0 规范的标准,
.Net系列:
- NHibernate
- NBear
- Castle ActiveRecord
- iBATIS.NET
- DAAB
- EntitysCodeGenerate
- EntityFormerWork
- Linq to sql
- PetaPoco
1.NHibernate
提起NHibernate,相信大家都不陌生,NHibernate来源于非常优秀的基于Java的Hibernate关系型持久化工具,它从数据库底层来持久化.Net对象到关系型数据库,NHibernate为我们完成这一切,而不用自己写SQL语句去操作数据库对象,所写的代码仅仅和对象关联,NHibernat自动产生SQL语句,并确保对象提交到正确的表和字段中去.大量减少开发时人工使用SQL和ADO.NET处理数据的时间. NHibernate可以帮助消除或者包装那些针对特定数据库的SQL代码,并且把结果集从表格的表示形式转换到一系列的对象去。NHibernate采用XML文件配置的方式,每一个实体类都会对应一个映射文件
2、EntitysCodeGenerate
EntitysCodeGenerate :是(VB/C#.Net实体代码生成工具)的简称,EntitysCodeGenerate(ECG)是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于面向对象、分层架构、ORM及反射+工厂模式等。
3、 PetaPoco
PetaPoco是一款适用于.Net 和Mono的微小、快速、单文件的微型ORM。
PetaPoco有以下特色:
- 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中。
- 工作于严格的没有装饰的Poco类,和几乎全部加了特性的Poco类
- Insert/Delete/Update/Save and IsNew 等帮助方法。
- 分页支持:自动得到总行数和数据
- 支持简单的事务
- 更好的支持参数替换,包括从对象属性中抓取命名的参数。
- 很好的性能,剔除了Linq,并通过Dynamic方法快速的为属性赋值
- T4模板自动生成Poco类
- 查询语言是Sql……不支持别扭的fluent或Linq语法(仁者见仁,智者见智)
- 包含一个低耦合的Sql Builder类,让内联的Sql更容易书写
- 为异常信息记录、值转换器安装和数据映射提供钩子。(Hooks for logging exceptions, installing value converters and mapping columns to properties without attributes.)
- 兼容SQL Server, SQL Server CE, MySQL, PostgreSQL and Oracle。
- 可以在.NET 3.5 或Mono 2.6或更高版本上运行
- 在.NET 4.0 和Mono 2.8下支持dynamic
- NUnit单元测试
- 开源(Apache License)
- 所有功能大约用了1500行代码