下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

软件设计:ORM

作者:H滴水     来源: https://www.cnblogs.com/houxt/p/11419382.html点击数:684发布时间: 2020-04-12 09:08:10

标签: javaXML软件设计

  对象关系映射(英语:(ObjectRelationalMapping,简称ORM,或O/RM,或O/Rmapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的--"虚拟对象数据库"。

  面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。

  了解orm,先了解以下概念:

  什么是“持久化”

  持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。

  什么是“持久层”

  持久层(PersistenceLayer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。

  什么是ORM

  即Object-RelationlMapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。

  为什么要做持久化和ORM设计(重要)

  在目前的企业应用系统设计中,MVC,即Model(模型)-View(视图)-Control(控制)为主要的系统架构模式。MVC中的Model包含了复杂的业务逻辑和数据逻辑,以及数据存取机制(如JDBC的连接、SQL生成和Statement创建、还有ResultSet结果集的读取等)等。将这些复杂的业务逻辑和数据逻辑分离,以将系统的紧耦合关系转化为松耦合关系(即解耦合),是降低系统耦合度迫切要做的,也是持久化要做的工作。MVC模式实现了架构上将表现层(即View)和数据处理层(即Model)分离的解耦合,而持久化的设计则实现了数据处理层内部的业务逻辑和数据逻辑分离的解耦合。而ORM作为持久化设计中的最重要也最复杂的技术,也是目前业界热点技术。

  简单来说,按通常的系统设计,使用JDBC操作数据库,业务处理逻辑和数据存取逻辑是混杂在一起的。

  一般基本都是如下几个步骤:

  1、建立数据库连接,获得Connection对象。

  2、根据用户的输入组装查询SQL语句。

  3、根据SQL语句建立Statement对象或者PreparedStatement对象。

  4、用Connection对象执行SQL语句,获得结果集ResultSet对象。

  5、然后一条一条读取结果集ResultSet对象中的数据。

  6、根据读取到的数据,按特定的业务逻辑进行计算。

  7、根据计算得到的结果再组装更新SQL语句。

  8、再使用Connection对象执行更新SQL语句,以更新数据库中的数据。

  7、最后依次关闭各个Statement对象和Connection对象。

  由上可看出代码逻辑非常复杂,这还不包括某条语句执行失败的处理逻辑。其中的业务处理逻辑和数据存取逻辑完全混杂在一块。而一个完整的系统要包含成千上万个这样重复的而又混杂的处理过程,假如要对其中某些业务逻辑或者一些相关联的业务流程做修改,要改动的代码量将不可想象。另一方面,假如要换数据库产品或者运行环境也可能是个不可能完成的任务。而用户的运行环境和要求却千差万别,我们不可能为每一个用户每一种运行环境设计一套一样的系统。

  所以就要将一样的处理代码即业务逻辑和可能不一样的处理即数据存取逻辑分离开来,另一方面,关系型数据库中的数据基本都是以一行行的数据进行存取的,而程序运行却是一个个对象进行处理,而目前大部分数据库驱动技术(如ADO.NET、JDBC、ODBC等等)均是以行集的结果集一条条进行处理的。所以为解决这一困难,就出现ORM这一个对象和数据之间映射技术。

  常用ORM框架

  java系列:

  ApacheOJB

  Cayenne

  Jaxor

  Hibernate

  iBatis

  jRelationalFramework

  mirage

  SMYLE

  TopLink

  .Net系列:

  NHibernate

  NBear

  CastleActiveRecord

  iBATIS.NET

  DAAB

  EntitysCodeGenerate

  EntityFormerWork

  Linqtosql

  PetaPoco

  总结

  ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

  ORM在业务逻辑层和数据库层之间充当了桥梁的作用。

  ORM的优势:ORM解决的主要问题是对象和关系的映射

  ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。

  ORM的劣势:在一定程度上牺牲程序的执行效率。

  ORM是“对象-关系-映射”的简称

  MVC或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库。

  ORM框架降低了学习门槛,一个对sql语句并不熟悉的开发人员也可以很容易通过简易的ORM框架Api进行数据库的操作。

  提高了开发效率,ORM使我们减少很多繁琐重复的工作量,让我们的注意力集中在实现业务上。

  一定程度上提高了程序的响应速度。

  ORM框架的弊端也很明显,框架会自动生成Sql语句,所有场景的sql语句都是同一套模板,难以自动针对场景对sql语句进行良好的优化,某种场景下很容易生成执行很慢的sql语句。如果让DBA看到这样的执行sql,必定引来抓狂崩溃。

  ORM框架只是为了满足绝大多数的场景而生的,特殊需要优化sql的场景下,我们完全可以直接使用驱动手动执行sql或使用ORM框架内提供的sql语句api进行自定义sql语句。

  对象关系映射(Object-RelationalMapping)提供了概念性的、易于理解的模型化数据的方法。ORM方法论基于三个核心原则:简单:以最基本的形式建模数据。传达性:数据库结构被任何人都能理解的语言文档化。

赞(8)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程