2.什么是持久化? 为什么要持久化? 1.什么是持久化?
本人找了好多文章都没有找到满意的答案,最后是从孙卫琴写的《精通Hibernate:Java对象持久化技术详解》中,看到如下的解释,感觉还是比较完整的。摘抄如下:
狭义的理解: “持久化”仅仅指把域对象永久保存到数据库中;广义的理解,“持久化”包括和数据库相关的各种操作(持久化就是将有用的数据以某种技术保存起来,将来可以再次取出来应用,数据库技术,将内存数据一文件的形式保存在永久介质中(磁盘等)都是持久化的例子.)。
●    保存:把域对象永久保存到数据库。
●    更新:更新数据库中域对象的状态。
●    删除:从数据库中删除一个域对象。
●    加载:根据特定的OID,把一个域对象从数据库加载到内存。
●    查询:根据特定的查询条件,把符合查询条件的一个或多个域对象从数据库加载内在存中。 2.为什么要持久化?
持久化技术封装了数据访问细节,为大部分业务逻辑提供面向对象的API。
● 通过持久化技术可以减少访问数据库数据次数,增加应用程序执行速度;
● 代码重用性高,能够完成大部分数据库操作;
● 松散耦合,使持久化不依赖于底层数据库和上层业务逻辑实现,更换数据库时只需修改配置文件而不用修改代码。

学习笔记之什么是持久化和对象关系映射ORM技术
by Naven at 2005-09-19

何谓“持久化”
持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
何谓“持久层”
持久层(Persistence Layer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。
何谓“对象数据映射(ORM)”
ORM-Object/Relational Mapper,即“对象-关系型数据映射组件”。对于O/R,即 Object(对象)和 Relational(关系型数据),表示必须同时使用面向对象和关系型数据进行开发。
备注:建模领域中的 ORM 为 Object/Role Modeling(对象角色建模)。另外这里是“O/R Mapper”而非“O/R Mapping”。相对来讲,O/R Mapping 描述的是一种设计思想或者实现机制,而 O/R Mapper指以O/R原理设计的持久化框架(Framework),包括 O/R机制还有 SQL自生成,事务处理,Cache管理等。

除了 ORM 技术,还有以下几种持久化技术
主动域对象模式
它是在实现中封装了关系数据模型和数据访问细节的一种形式。在 J2EE 架构中,EJB 组件分为会话 EJB 和实体 EJB。会话 EJB 通常实现业务逻辑,而实体 EJB 表示业务实体。实体 EJB 又分为两种:由 EJB 本身管理持久化,即 BMP(Bean-Managed Persistence);有 EJB 容器管理持久化,即 CMP(Container-Managed Persistence)。BM P就是主动域对象模式的一个例子,BMP 表示由实体 EJB 自身管理数据访问细节。
主动域对象本身位于业务逻辑层,因此采用主动域对象模式时,整个应用仍然是三层应用结构,并没有从业务逻辑层分离出独立的持久化层。
JDO 模式
Java Data Objects(JDO)是 SUN 公司制定的描述对象持久化语义的标准API。严格的说,JDO 并不是对象-关系映射接口,因为它支持把对象持久化到任意一种存储系统中,包括 关系数据库、面向对象的数据库、基于 XML 的数据库,以及其他专有存储系统。由于关系数据库是目前最流行的存储系统,许多 JDO 的实现都包含了对象-关系映射服务。
CMP 模式
在 J2EE 架构中,CMP(Container-Managed Persistence)表示由 EJB 容器来管理实体 EJB 的持久化,EJB 容器封装了对象-关系的映射及数据访问细节。CMP 和 ORM 的相似之处在于,两者都提供对象-关系映射服务,都把对象持久化的任务从业务逻辑中分离出来。区别在于 CMP 负责持久化实体 EJB 组件,而 ORM 负责持久化 POJO,它是普通的基于 Java Bean 形式的实体域对象。
一般把基于 Java Bean 形式的实体域对象称为 POJO(Plain Old Java Object),意为又普通又古老的 Java 对象的意思。随着各种 ORM 映射工具的日趋成熟和流行,POJO有重现光彩,它和基于 CMP 的实体 EJB 相比,即简单又具有很高的可移植性,因此联合使用 ORM 映射工具和 POJO,已经成为一种越来越受欢迎的且用来取代 CMP 的持久化方案。POJO 的缺点就是无法做远程调用,不支持分布式计算。

为什么要做持久化和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 思想将如下实现(引自《深入浅出Hibernate》):
业务逻辑如下:
public Double calcAmount(String customerid, double amount)
{
    // 根据客户ID获得客户记录
    Customer customer = CustomerManager.getCustomer(custmerid);
    // 根据客户等级获得打折规则
    Promotion promotion = PromotionManager.getPromotion(customer.getLevel());
    // 累积客户总消费额,并保存累计结果
    customer.setSumAmount(customer.getSumAmount().add(amount);
    CustomerManager.save(customer);
    // 返回打折后的金额
    return amount.multiply(protomtion.getRatio());
}
这样代码就非常清晰了,而且与数据存取逻辑完全分离。设计业务逻辑代码的时候完全不需要考虑数据库JDBC的那些千篇一律的操作,而将它交给 CustomerManager 和 PromotionManager 两个类去完成。这就是一个简单的 ORM 设计,实际的 ORM 实现框架比这个要复杂的多。

目前有哪些流行的 ORM 产品
目前众多厂商和开源社区都提供了持久层框架的实现,常见的有
Apache OJB ( http://db.apache.org/ojb/ )
Cayenne ( http://objectstyle.org/cayenne/ )
Jaxor ( http://jaxor.sourceforge.net )
Hibernate ( http://www.hibernate.org )
iBatis ( http://www.ibatis.com )
jRelationalFramework ( http://ijf.sourceforge.net )
mirage ( http://itor.cq2.org/en/oss/mirage/toon )
SMYLE ( http://www.drjava.de/smyle )
TopLink ( http://otn.oracle.com/products/ias/toplink/index.html )
其中 TopLink 是 Oracle 的商业产品,其他均为开源项目。
其中 Hibernate 的轻量级 ORM 模型逐步确立了在 Java ORM 架构中领导地位,甚至取代复杂而又繁琐的 EJB 模型而成为事实上的 Java ORM 工业标准。而且其中的许多设计均被 J2EE 标准组织吸纳而成为最新 EJB 3.0 规范的标准,这也是开源项目影响工业领域标准的有力见证。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/powerglover/archive/2009/03/25/4022428.aspx

转载于:https://www.cnblogs.com/T-MAC1988/archive/2010/02/06/1665015.html

什么是OR MAPPING相关推荐

  1. MD5 - Bump Mapping

    使用<mathematics for 3d game programming & computer graphics>中介绍的方法计算tangent basis. 需要注意的一点是 ...

  2. RTB中的cookie mapping理解

    使用场景如下 对于常规的网络用户,Cookie 匹配功能会如何在后台运作?我们来看看以下两种情况. 第 1 种情况:清除 Cookie 小丽清除了缓存中的所有 Cookie.随后,她访问了 Examp ...

  3. 关于部署osd过程中:Device is in use by a device-mapper mapping问题解决

    ceph环境:12.2.1 使用古老的ceph-disk工具部署osd,仅仅prepare过程中就出现如上所示问题 Device is in use by a device-mapper mappin ...

  4. Tessellation (曲面细分) Displacement Mapping (贴图置换)

    DirectX 11 Tessellation (曲面细分)-什么是 Tessellation (曲面细分) ? 它为什么可以起到如此关键的数据? 随着近期人们对 DirectX 11 的议论纷纷,你 ...

  5. nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping

    今天mybatis报了个错误 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type ...

  6. elasticsearch mapping

    2019独角兽企业重金招聘Python工程师标准>>> es的mapping设置很关键,mapping设置不到位可能导致索引重建.如何更好的设置mapping? 请看下面各个类型介绍 ...

  7. Parallax Mapping Shader 凸凹感【转】

    原文 http://www.azure.com.cn/default.asp?cat=11&page=2 Parallax Mapping 就是通过高度图中的高度,对纹理坐标进行偏移, 来视觉 ...

  8. BizTalk 开发小技巧-Custom XSLT复杂mapping的简单实现

    BizTalk最强大的就是消息的订阅/发布和消息转换(transform-mapping),与不同的业务系统做对接势必会用到mapping这个强大的工具.BizTalk提供了非常丰富的mapping函 ...

  9. IROS2021 | F-LOAM : Fast LiDAR Odometry and Mapping 解析

    作者丨马赫WGH@知乎 来源丨https://zhuanlan.zhihu.com/p/452544259 编辑丨3D视觉工坊 IROS是机器人领域的盛会,本文由南洋理工大学的在读博士王晗等人发表于I ...

  10. Long Read Mapping at Scale: Algorithms and Applications

    Long Read Mapping at Scale: Algorithms and Applications 大规模长读映射:算法和应用 DNA测序技术已经有40年的历史了,这为我们提供了充足的时间 ...

最新文章

  1. lsa五类_OSPF外部路由4类5类LSA
  2. 前端三十五:图片的基本概念
  3. 活动 | 5G万物智联下互联网通信技术升级之路
  4. python cmd窗口名字_python cmd 窗口 中文乱码 解决方法 (附:打印不同颜色)
  5. C语言之文件读写探究(一):fopen、fclose(文件的打开和关闭)
  6. kafka 权威指南笔记
  7. 《增长黑客》节选与笔记
  8. HackTheBox-Magic-Walkthrough
  9. 小米论坛php,黑橙新版小米社区discuz模板
  10. background 渐变背景
  11. 发力1小时到家服务,山姆与京东到家共建前置仓获10倍坪效、60%月复购率
  12. 知道一个公司的网站地址,怎么快速获取邮箱。
  13. 从身家500万到两手空空,看她如何再次成功翻身
  14. 《计算机应用基础》课程计划,计算机应用基础课程教学计划
  15. vue3 创建vue3模板
  16. 如何把云服务器恢复到最原始的状态
  17. 跨行交易的一些常见的知识
  18. ecshop mysql 标题表_ECshop 每个数据库表结构说明_MySQL
  19. PTA刷题Basic篇——1051.复数乘法——Day(26)
  20. 第6关:人民币美元汇率双向兑换计算

热门文章

  1. css结构和重叠之选择器的特殊性
  2. 为DataGrid创建自定义列控件(四)
  3. S5P4418 OV5640摄像头 花屏的解决方法
  4. ln -s命令 linux,linux ln命令详解
  5. python telnetlib 协商_Python telnetlib:令人惊讶的问题
  6. 图像缩放算法_opencv缩放算法
  7. 5月24日起,每晚8点,实时数仓入门训练营见!
  8. 文件按m3u8顺序合并_在线视频下载之m3u8篇
  9. 如何在手游中运用高逼格光影效果?
  10. 一个游戏美术写给策划的快速入门(二)