http://www.cnblogs.com/chenkai/archive/2011/01/06/1929040.htmlhtml
ORM[Object-Relation-Mapping]对象关系映射. 这个名词已经出来好几年了.已经不陌生. 之前在项目中针对相对复杂业务逻辑时通常采用领域模型驱动方式进行业务概述,分析和建模. 其中在设计阶段我第一次接触ORM这个概念. 针对实际项目中ORM 采用的是Nhibernate实现底层数据持久化. 固然如今ORM成熟的工具已经不少了. 本篇的目的结合以往实际编程经验.系统整理ORM原型概念.程序员
解释这个名词并不难.先了解一下ORM由来. 其实ORM的需求真正由来是在随着面向对象OO编程开发方法发展而产生的. 现在面向对象[Object]的OO编程已经成为企业级开发中主流开发方法. 而关系型数据库也成为企业级应用环境中永久存放数据的主流数据存储系统. 其实到这你应该明白. 一样的数据一个是在实际编程中一Object面向对象方式体现, 而另一种就是把这种内存对象持久化存储到硬盘文件上. 数据库
由此能够说对象[Object]和关系数据是业务实体的 两种不一样表现形式.业务实体Object在内存中表现为对象,在数据库中表现为关系数据.编程
内存中的对象之间存在关联和继承关系,而在数据库中,关系数据没法直接表达多对多关联和继承关系。所以,对象-关系映射(ORM)系统通常以中间件的形式存在,主要实现程序对象到关系数据库数据的映射.架构
这时有人会问为何须要ORM?app
先从项目中数据流存储形式这个角度提及. 简单拿MVC这种分层模式.来讲. Model做为数据承载实体. 在用户界面层和业务逻辑层之间数据实现面向对象OO形式传递. 当咱们须要经过Control层分发请求把数据持久化时咱们会发现. 内存中的面向对象的OO如何持久化成关系型数据中存储一条实际数据记录呢?框架
面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的. 二者之间是不匹配的.而ORM做为项目中间件形式实现数据在不一样场景下数据关系映射. 对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.ORM就是这样而来的.数据库设计
ORM推出在某种程度上打破咱们架构上设计.同时也带来一些没有使用ORM以前未曾出现问题. 但最值得确定是编码效率得到必定提升.能够把更多精力和时间 从底层数据访问层代码重复工做中解放出来.关注程序和业务自己. 这时ORM所带来程序员生产力提升工具
另一个不得不说就是维护的成本. 之前咱们用ADO.NeT搭建的庞大 复杂数据访问层. 我想在MVC架构UI 和Control能够实现层与层之间的解耦.而数据访问层DAtaAccess Layer却时候关联业务逻辑中. 当发生轻微变更时就要修改底层数据访问层.这样维护频率和灵活度.大为使人诟病. 可想而知这样维护成本也是很庞大费时费力的事情.性能
ORM体现特色:
<1>提升开发效率.ORM框架自动实现Entity实体的属性与关系型数据库字段的映射.CRUD的工做则能够交给ORM来自动生成代码方式实现.打打提升咱们开发效率. 这样一来也减小咱们维护一个复杂 缺少灵活性数据访问层的成本.
<2>NOSQl数据操做.NOSQL 数据库最近几年才提出这个概念 主要用在一些开源数据库上.相似Repid DB上 而ORM中无需直接操做T_SQL语句,实现数据操做. 其实了解做为Hibernate的创始人,Gavin King在设计Hibernate是全然不知T_SQL如何使用. 这让不少人汗然一把.
<3>来讲说目前ORM这种模式缺点.
相信不少用过Herberate或是.NEt版本的.NHerberate的应该了解. 咱们在搭建好项目结构后. 作好XML数据库访问配置文件. 而后就能够轻松根据数据实体EntityModel实现数据的CRUD操做. NOSQL的操做让咱们开发效率获得质的飞跃. 但是等项目中期进入测试咱们DBA看到数据库链接SQL语句 说了一句"F**k 连接这么长的SQL是有病吗?“ 为什么这么说呢?
假设咱们DBA遇到事这样场景. 相似咱们如今作一个系统访问权限验证. 数据库设计表之间实现6张表关联. 在的大数据量状况下. CRM给咱们生成一些低效 访问SQL 照成咱们性能一直上不去. 虽然自动生成代码 但你看NHerberate并非每次生成代码都是具备高性能知足你的需求. 因而你的DBA那天给你说 “哪一个XX某某. 你把这段访问作一下SQL优化一下?” 回日:“那是NHerberate自动生成的 和我有什么关系?” DBA:”因而很抓狂说了一句 多链接状况T_SQL会照成屡次访问死锁?必须得优化.” 回日:“那时Nherberate自动生成的 我无法修改啊?” DBA“直接从极度抓狂中陷入崩溃……”
上面杜撰一下一段经历. 之前使用NHerberate使用过程说明CRM一个问题:
CRM的肯定是在必定程度上牺牲了程序的执行性能和固定的思惟模式.
A:首先从系统架构来讲采用ORM这种方式做为底层数据访问层. 架构多数采用多层架构方式. 系统架构分层越多 同时面向对象这种编程方式 执行效率也随之下降. 相似一个普通支持多数据架构方式MyBatis ORM框架架构方式以下图:
B:性能问题.在使用CRM做为数据访问层系统架构中. 咱们大部分的数据CRUD操做交给CRM来自动生成代码方式实现. 可是CRM内置自动生成代码只是按照对象关系规则自动生成 不必定能知足执行性能.相似上面出现状况. 这种状况须要使用额外工具,和配置策略来灵活实现CRM数据访问.
如上简单介绍ORM原型概念.搞清楚概念 才能更方面之后CRM操做上理解. 若有疑问请在留言中提出.