ORM(Object-relational mapping),中文翻译为对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是经过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。程序员
在程序开发中,数据库保存的表,字段与程序中的实体类之间是没有关联的,在实现持久化时就比较不方便。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操做提供单独的方法。这种方案存在如下不足:算法
ORM提供了实现持久化层的另外一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁sql
ORM的方法论基于三个核心原则:数据库
本文以C#编程语言为例,在传统的数据读取操做中,咱们以Ado.net的方式对数据库进行CRUD操做,使用的基本都是SQL硬编码,好比有如下数据库查询操做:编程
String sql = "SELECT ... FROM persons WHERE id = 10"; DbCommand cmd = new DbCommand(connection, sql); Result res = cmd.Execute(); String name = res[0]["FIRST_NAME"];
使用了ORM映射的C#实现的伪代码:app
Person p = repository.GetPerson(10); String name = p.getFirstName();
上面的示例代码表示咱们能够从数据仓库repository中获取到一个实体对象,固然数据仓库中可能包含其余的方法,你也能够定义本身的ORM实现,好比:编程语言
Person p = Person.Get(10);
一般,在处理ORM映射和数据仓库时会暴露一些过滤或者查询方法,容许客户端对数据集进行进一步的筛选等操做,好比代码演示从数据库中查询ID=10的用户:性能
Person p = Person.Get(Person.Properties.Id == 10);
与传统的数据库访问技术相比,ORM有如下优势:编码
从系统结构上来看,采用ORM的系统通常都是多层系统,系统的层次多了,效率就会下降。ORM是一种彻底的面向对象的作法,而面向对象的作法也会对性能产生必定的影响。.net
在咱们开发系统时,通常都有性能问题。性能问题主要产生在算法不正确和与数据库不正确的使用上。ORM所生成的代码通常不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体如今对持久对象的提取和和数据的加工处理上,若是用上了ORM,程序员颇有可能将所有的数据提取到内存对象中,而后再进行过滤和加工处理,这样就容易产生性能问题。
做为一名编程人员,在ORM使用的观念上会有不一样,具体取舍需根据具体的项目和场景。
本文同步发表至 码友网 《什么是ORM?为何用ORM?浅析ORM的使用及利弊》