什么是“持久化”
持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
什么是“持久层”
持久层(Persistence Layer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。
什么是ORM
即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的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 思想将如下实现(引自《深入浅出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技术,开发者可以使用面向对象的方式来操作数据库,而无需直接编写SQL语句,极大地提高了开发效率和代码的可维护性。 在Java Web开发中,ORM框架如Hibernate、MyBatis等被广泛应用。这些框架将Java对象...
Java面试题55.ORM是什么?ORM框架是什么?.mp4
java面试宝典
HSWeb-Easy-ORM 的出现,为开发者提供了更便捷的方式来处理数据库操作,尤其在处理动态数据表单时,其优势更为明显。 首先,HSWeb-Easy-ORM 提供了一种直观的 API 设计,使得创建、查询、更新和删除数据库记录变得...
标题中的"cpp-SQLiteORM用于现代C++的SQLite ORM库只有header"表明这是一个关于C++的SQLite对象关系映射(ORM)库,且该库仅包含头文件,这意味着开发者无需链接任何库文件,只需包含相应的头文件即可使用。ORM是一...
ORM 还提供了灵活性,使用 ORM 创建的模型比使用其它方法创建的模型更有能力适应系统的变化。 在面向对象的软件开发方法中,对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现...
本教程将通过一个简单易懂的示例来介绍如何在Android项目中使用ORMSQL进行数据存储和查询。 ### ORM概念 ORM全称为Object-Relational Mapping,即对象关系映射,它是一种技术,用于将关系数据库的数据模型与面向...
4. **orm??**:这个文件名可能是ORM的某种简写或特定实现,具体细节无法确定,需要查看源码来了解详情。 5. **Simple.Data-master**:Simple.Data是一个轻量级的ORM框架,它提供了一种简单的方式来访问数据库,无需...
1. **ORM思想**:ORM的核心思想是通过在应用程序中的对象与数据库表之间建立映射关系,使得开发者可以使用面向对象的方式来操作数据库,而无需直接编写SQL语句。这种映射关系通常通过XML配置文件或者注解来定义,...
本文将详细探讨一个名为“K-ORM”的自定义ORM工具,该工具基于JDBC和Java反射机制实现,旨在提供简单易用的数据操作接口。 首先,我们要理解JDBC(Java Database Connectivity)在其中的角色。JDBC是Java平台上的...
Sqlite ORM 是一个简单的C#类,对Sqlite的操作进行了封装,主要功能包括:表定义、生成,访问,更新等,其中,支持,多表的连接操作,语法类似Linq语法,使用非常方便,附加了使用说明文档。 例如,添加记录操作为...
Python中的TortoiseORM是一个强大的、易于学习和使用的异步对象关系映射(ORM)库。ORM框架允许开发者使用高级的编程语言(如Python)来操作数据库,而无需直接编写SQL语句,大大简化了数据库操作。在Python的开发...
综上所述,SQLite3的ORM框架为C++开发者提供了一种方便、直观的方式来操作SQLite3数据库。通过面向对象的编程方式,它可以降低学习曲线,提高开发速度,并且使代码更易于维护。在实际应用中,开发者只需专注于业务...
Moon.Orm是一个专门为.NET开发者设计的轻量级ORM(对象关系映射)框架,它具有强大的功能和良好的可扩展性,能够支持多种不同的数据库系统,包括但不限于MySQL、SQL Server、Oracle、SQLite等。ORM框架的主要目标是...
eform集成开发手册是专门为eform开发人员设计的指南,旨在帮助开发者快速了解eform的集成开发流程和技术细节。该手册涵盖了eform集成开发的各个方面,包括系统文件说明、系统表结构说明、eform for .net 和eform for...
本篇将深入探讨Android中ORM数据库的使用,特别是以ActiveAndroid为例。 **ORM框架介绍** ORM是一种编程技术,它可以将关系型数据库的数据映射到对象上,使得开发者可以像操作普通对象一样操作数据库。ORM框架消除...
在这些ORM框架中,"源码"标签可能意味着博客会深入到ORM的内部实现,探讨如何阅读和理解ORM的代码,这对于想要自定义或优化ORM行为的开发者非常有用。而"工具"标签可能涵盖了如何集成和使用这些ORM工具到项目中的...
这样,开发者可以使用面向对象的语言(如Java)操作对象,而ORM框架负责在后台将这些操作转化为相应的SQL指令,与数据库进行交互。 ORM的实现通常包括以下几个组件: 1. **持久化类对象操作API**:这是一个用于...
Spring 框架是 Java 开发中的一个核心组件,它为开发者提供了丰富的功能,包括依赖注入、面向切面编程、事务管理等。在企业级应用开发中,数据持久化是必不可少的一部分,ORM(Object-Relational Mapping)框架则...
Qt ORM(对象关系映射)是一种在Qt框架下实现数据库操作的技术,它允许开发者使用面向对象的方式来处理数据库数据,而无需直接编写SQL语句。ORM技术的核心思想是将数据库中的表映射为对象,表中的行映射为对象实例,...