ORM

企业应用持久化技术:ORM及其他
在企业应用系统设计中,MVC是主要架构模式,降低系统耦合度需进行持久化设计。ORM是持久化设计中重要且复杂的技术。此外,还介绍了主动域对象模式、JDO模式、CMP模式等持久化技术,以及POJO与CMP的对比。

本文引用自/:http://www.cppblog.com/javenstudio/articles/541.html

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

何谓“持久化”
持久(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 的缺点就是无法做远程调用,不支持分布式计算。

03-20
### ORM全称及其工作原理 ORM 的全称是 **Object-Relational Mapping**,即对象关系映射。它是一种编程技术,用于将对象模型与关系型数据库模型之间进行转换[^1]。在应用程序开发中,开发者通常会使用面向对象的语言(如 Python),而底层的数据存储则多采用关系型数据库(如 MySQL 或 PostgreSQL)。由于这两者之间的数据表示方式存在差异,因此需要一种机制来进行桥接。 #### 工作原理 ORM 的核心功能在于建立程序中的对象与其对应的数据库记录之间的映射关系。具体来说: 1. 将类映射为数据库中的表; 2. 将类的属性映射为表中的字段; 3. 将对象实例映射为表中的单条记录。 这种映射使得开发者可以像操作普通的对象一样对数据库进行增删改查操作,无需手动编写复杂的 SQL 语句。例如,在 Django 中可以通过 `filter` 方法实现查询条件过滤。 以下是 Django ORM 使用的一个简单例子: ```python from myapp.models import MyModel # 查询所有符合条件的对象 results = MyModel.objects.filter(field__condition=value) for result in results: print(result.some_field) ``` 在这个过程中,Django 自动将上述代码翻译成相应的 SQL 并执行查询。 --- ### 数据库对象关系映射的具体实现方式 为了更好地理解 ORM 的实现细节,可以从以下几个方面入手: #### 1. 类与表的关系定义 ORM 框架允许开发者通过定义类的方式描述数据库结构。例如,在 Django 中,每一个 Model 类都代表一张数据库表,其属性则对应于表中的列。下面是一个简单的示例[^4]: ```python class User(models.Model): name = models.CharField(max_length=50) age = models.IntegerField() ``` 在此基础上,ORM 框架会在后台生成并维护所需的元数据,以便将其转化为实际的数据库模式。 #### 2. 动态构建 SQL 当调用诸如 `.filter()` 这样的方法时,ORM 不会立即执行查询,而是先构建一个 QuerySet 对象。这个对象包含了所有的查询条件,并且只有在真正需要用到结果集的时候才会触发实际的 SQL 执行。 #### 3. 缓存优化 许多现代 ORM 实现还提供了缓存机制以提高性能。比如,如果多次请求相同的数据,则可以直接返回之前的结果而不是每次都重新发起数据库查询[^2]。 #### 4. 跨平台兼容性 某些高级框架(如同 ThinkPHP 提供的 DAL 层)能够屏蔽不同 RDBMS 间的语法差异,让应用更容易移植到其他类型的数据库上运行。 --- ### 总结 综上所述,ORM 是连接高层抽象世界(对象)和低级物理存储媒介(表格)的重要桥梁之一。借助这一工具,软件工程师不仅减少了重复劳动量——因为不再需要手写大量繁琐的基础 CRUD (Create Read Update Delete) 操作逻辑;同时也增强了系统的可扩展性和灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值