什么是ORM?

一、ORM简介
        对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。
        这种方案存在以下不足: 
        1.持久化层缺乏弹性。一旦出现业务需求的变更,就必须修改持久化层的接口 
        2.持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾的相关程序代码,增加了软件的维护难度。

ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁。Java典型的ORM中间件有:Hibernate,ibatis,speedframework。 
        ORM的方法论基于三个核心原则:
  · 简单:以最基本的形式建模数据。
  · 传达性:数据库结构被任何人都能理解的语言文档化。
  · 精确性:基于数据模型创建正确标准化了的结构。

二、ORM的概念 
        让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。 
        当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。

ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。 
        ORM技术特点: 
        1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。 
        2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

三、ORM的优缺点 
        ORM的缺点是会牺牲程序的执行效率和会固定思维模式。 
        从系统结构上来看,采用ORM的系统一般都是多层系统,系统的层次多了,效率就会降低。ORM是一种完全的面向对象的做法,而面向对象的做法也会对性能产生一定的影响。

在我们开发系统时,一般都有性能问题。性能问题主要产生在算法不正确和与数据库不正确的使用上。ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和和数据的加工处理上,如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和加工处理,这样就容易产生性能问题。 
        在对对象做持久化时,ORM一般会持久化所有的属性,有时,这是不希望的。 
        但ORM是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。但我们不能指望工具能一劳永逸的解决所有问题,有些问题还是需要特殊处理的,但需要特殊处理的部分对绝大多数的系统,应该是很少的。

时间: 2024-10-05 09:34:13

什么是ORM?的相关文章

Django(三) ORM 数据库操作

比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 表结构 二.Django ORM基本增删改查 1.表数据增删改查 2.表结构修改 三.Django ORM 字段类型 1.字段类型介绍 2.字段参数介绍 3.Django ORM 外键操作 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 ORM:关系对象映射.定义一个类自动生成数

SqlSugar ORM已经支持读写分离

目前只有MYSQL版 3.5.2.9 支持,其库版本12月3号更新该功能 用例讲解 using (var db = new SqlSugarClient("主连接字符串", "从连接字符串","可以多个从连接")) { var list= db.Queryable<Student>().ToList();//走从 var list= db.Queryable<Student>().ToJson();//走从 db.Inse

自己动手写ORM(01):解析表达式树生成Sql碎片

什么是ORM框架:   ORM即对象关系映射(Object Relational Mapping,简称ORM),是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中. 自己也用过很多ORM框架,比如微软的EF,Hibernate.轻量级一点的有Depper等等.这些框架说白了就是让我们能像操作对象那样去操作数据库. 鄙人是个比较懒的程序猿,总想这写更少的代码做更多的事情,最近不是很忙,于是

SQLAlchemy使用笔记--SQLAlchemy ORM(二)

参考: http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#building-a-relationship http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#working-with-related-objects 建立表之间带关系 建立外建 在address添加user的外键 from sqlalchemy import ForeignKey, Column, String

atitit.orm的缺点与orm框架市场占有率,选型attilax总结

1. attilax的orm框架要求 1 2. orm框架市场占有率 2 3. spring jdbc templt 3 4. eclipselink /toplink  不好用 4 5. jooq 的总结 4 6. attilax的选择 atiorm 4 7. 参考 4 1. attilax的orm框架要求 1.无需配置文件或注解..直接从map.json生成sql 2.直接获取sql..无需连接数据库..方便调试.或这sql传输. 作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:

最好的5个Android ORM框架

在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式,即本地数据存储,如嵌入式SQLLite,你可以选择直接使用SQL语句.Content Provider 或 ORM(对象关系数据映射). 对于 Android 应用的开发,主要是使用Java语言,所以适用于Java语言的一些ORM,也能移植于 Android 平台上. 下面是5个可用ORM的总体介绍

FluentData - 轻量级.NET ORM持久化技术解决方案

目录: 一.什么是ORM? 二.使用ORM的优势 三.使用ORM的缺点 四.NET下的ORM框架有哪些? 五.几种常用框架的比较 六.什么是FluentData? 七.快速上手如何使用FluentData? 八.提供资源下载 内容: 一.什么是ORM?  ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法. 二

Django基础之数据库与ORM

一.数据库配置 1.django默认支持sqlite,mysql, oracle,postgresql数据库. django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 , 引擎名称:django.db.backends.sqlite3 引擎名称:django.db.backends.mysql 2.在django的项目中会默认使用sqlite数据库,在settings里有如下设置: DATABASES = { 'default': { 'ENGINE': 'django.db

.NET轻量级ORM组件Dapper葵花宝典

一.摘要 为什么取名叫<葵花宝典>? 从行走江湖的世界角度来讲您可以理解为一本"武功秘籍",站在我们IT编程的世界角度应该叫"开发宝典". 如果您在工作中主要接触的是操作MySQL数据库,但您又想学习和了解.NET轻量级ORM框架Dapper,那么就请跟着阿笨一起学习本次的分享课<.NET轻量级ORM框架Dapper葵花宝典>.Let's Go,Do It ,Dapper For MySQL! 废话不多说,直接上干货,我们不生产干货,我们只是

Django models ORM基础操作--白话聊Django系列

上次我们讲完了views视图,那我们这次来看一下Django强大的ORM,可以这么说,你不懂Django的ORM,你就不懂Django,那废话不多说 ORM又称关系对象映射,在ORM里,一张表就是一个类,一行数据就是类的一个对象 在Django中遵循code first的原则,即:根据代码中定义的类来自动生成数据库表 利用ORM来实现定义表,以及对表进行操作 注意:在连接数据库上,Django默认是连接MySQLdb的,但是在python3中,不是很完美的支持这个模块,所以创建的Django项目