什么是orm(代码片段)

author author     2022-12-03     715

关键词:

一、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是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。但我们不能指望工具能一劳永逸的解决所有问题,有些问题还是需要特殊处理的,但需要特殊处理的部分对绝大多数的系统,应该是很少的。
  • 什么是“持久化”
    持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。

按通常的系统设计,使用 ,操作数据库,业务处理逻辑和数据存取逻辑是混杂在一起的。
一般基本都是如下几个步骤:
1、建立数据库连接,获得 Connection 对象。
2、根据用户的输入组装查询 SQL 语句。
3、根据 SQL 语句建立 Statement 对象 或者 PreparedStatement 对象。
4、用 Connection 对象执行 SQL语句,获得结果集 ResultSet 对象。
5、然后一条一条读取结果集 ResultSet 对象中的数据。
6、根据读取到的数据,按特定的业务逻辑进行计算。
7、根据计算得到的结果再组装更新 SQL 语句。
8、再使用 Connection 对象执行更新 SQL 语句,以更新数据库中的数据。
7、最后依次关闭各个 Statement 对象和 Connection 对象。
这样操作会很复杂,而ORM将这些复杂的操作简单化,只需要生成一个对象,对这个对象进行操作,自动就会转换成SQL语句,去数据库进行操作,再将返回的结果从新转换成对象

半自动orm与全自动orm框架有什么区别?(代码片段)

什么是ORM?ORM对象关系映射(英语:ObjectRelationalMapping,简称ORM,或O/RM,或O/Rmapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它... 查看详情

orm操作(代码片段)

今天闲来无事简单谈下ORM操作。一:前言1.什么是ORM   ORM,即Object-RelationalMapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再... 查看详情

04--元类和orm(代码片段)

   本篇主要介绍元类,为什么说一切皆对象;如何动态的创建类等;以及ORM,即什么是ORM等知识一、元类  1.1在Python中一切皆对象  在学习元类中我们首先需要了解一个概念-- python中一切皆对象,那么为什么这么... 查看详情

64-django进阶(orm)(代码片段)

1、什么是ORM  对象关系映射(ObjectRelationalMapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。  简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持... 查看详情

第六章django框架学习——orm详解(代码片段)

...(部分内容前面的章节已经介绍过,此处只做简单介绍)什么是ORM(what):ORM是通过使用描述对象和数据库之间映射的元数 查看详情

django中orm之什么是正向查询什么是反向查询(代码片段)

表PublishclassPublish(models.Model):  nid=models.AutoField(primary_key=True)  name=models.CharField(max_length=32)  city=models.CharField(max_length=32)  email=models.EmailField() 表BookclassBook(models.Model):  nid=models.AutoField(primary_key=True)  title=models.Char... 查看详情

django--orm(代码片段)

前言ORM是什么?:(在django中,根据代码中的类自动生成数据库的表也叫--codefirst)ORM:ObjectRelationalMapping(关系对象映射)类名对应------》数据库中的表名类属性对应---------》数据库里的字段类实例对应---------》数据库表里的一行数... 查看详情

django-orm简记(代码片段)

首先orm是什么?orm-------->对象关系映射专业性解释网上一大推,随便搜搜就能了解大概。在我理解(通俗):一个类-----数据库中一张表类属性-----数据表中的字段名实例一个对象---表里的一条记录orm的原理现在还没搞懂,它是具... 查看详情

gormcrud5分钟快速上手(代码片段)

文章目录1.ORM是什么2.GORM是什么3.安装4.连接DB5.创建数据表6.增加(Create)7.查询(Read)8.更新(Update)9.删除(Delete)10.小结参考文献1.ORM是什么ORM(ObjectRelationalMapping)& 查看详情

django之orm(代码片段)

...码业务逻辑层去调用数据访问层执行数据库操作 ORM是什么?:(在django中,根据代码中的类自动生成数据库的表也叫--codefirst)ORM: 查看详情

flask中的orm(代码片段)

1响应(response)1什么是响应响应就是由服务器端带给客户端的内容,对应着请求,响应可以是普通的字符串,模板或重定向return‘普通字符串‘returnrender_template(‘xxx.html‘)2响应对象响应对象:将响应的内容封装到一个对象中,... 查看详情

java相关面试题总结+答案(代码片段)

【Hibernate】113.为什么要使用hibernate?hibernate是对jdbc的封装,大大简化了数据访问层的繁琐的重复性代码。hibernate是一个优秀的ORM实现,很多程度上简化了DAO层的编码功能。可以很方便的进行数据库的移植工作。提供了缓存机制... 查看详情

python常用的orm/orm框架(代码片段)

...多数都会选择使用ORM方式操作数据库,如果你不知道什么是ORM的话请自行百度。今天唐丁给大家介绍几个常用的ORM库,并列出其中常用的操作数据库的函数。sqlalchemy这个框架适合企业级项目的开发安装pipinstallsqlalchemy数... 查看详情

orm之中介模型(代码片段)

一、什么是中介模型中介模型针对的是ManyToMany(多对多)的时候第三张表的问题,中介模型其实指的就是我们不通过Django创建第三张表,如果自己不创建第三张表,而是由django给我们创建,那就不存在中介模型二、实例普通的Ma... 查看详情

c#数据操作系列-4.自己实现一个orm(代码片段)

...识点:反射(初级)ADO.NET已有知识1.ORM那么,问题来了,什么是ORM?ORM全称ObjectRelationalMapping,翻译过来就是对象关系映射。是一种通过描 查看详情

c#数据操作系列-4.自己实现一个orm(代码片段)

...识点:反射(初级)ADO.NET已有知识1.ORM那么,问题来了,什么是ORM?ORM全称ObjectRelationalMapping,翻译过来就是对象关系映射。是一种通过描 查看详情

orm操作(代码片段)

ORM介绍(ObjectRelationalMapping(ORM)ORM概念对象关系映射(ObjectRelationalMapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序... 查看详情

orm框架(代码片段)

 ORM 全拼Object-RelationMapping.中文意为 对象-关系映射.主要实现模型对象到关系数据库数据的映射.O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意... 查看详情