什么是ORM?为啥要是用ORM?

了解orm,先了解如下概念:数据库

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

什么是 “持久层” 
持久层(Persistence Layer),即专一于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。app

 

什么是ORM框架

即Object-Relationl Mapping,它的做用是在关系型数据库和对象之间做一个映射,这样,咱们在具体的操做数据库的时候,就不须要再去和复杂的SQL语句打交道,只要像平时操做对象同样操做它就能够了 。设计

 

为何要作持久化和ORM设计(重要)orm

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

简单来讲,按一般的系统设计,使用 JDBC 操做数据库,业务处理逻辑和数据存取逻辑是混杂在一块儿的。
通常基本都是以下几个步骤:
一、创建数据库链接,得到 Connection 对象。
二、根据用户的输入组装查询 SQL 语句。
三、根据 SQL 语句创建 Statement 对象 或者 PreparedStatement 对象。
四、用 Connection 对象执行 SQL语句,得到结果集 ResultSet 对象。
五、而后一条一条读取结果集 ResultSet 对象中的数据。
六、根据读取到的数据,按特定的业务逻辑进行计算。
七、根据计算获得的结果再组装更新 SQL 语句。
八、再使用 Connection 对象执行更新 SQL 语句,以更新数据库中的数据。
七、最后依次关闭各个 Statement 对象和 Connection 对象。ip

由上可看出代码逻辑很是复杂,这还不包括某条语句执行失败的处理逻辑。其中的业务处理逻辑和数据存取逻辑彻底混杂在一块。而一个完整的系统要包含成 千上万个这样重复的而又混杂的处理过程,假如要对其中某些业务逻辑或者一些相关联的业务流程作修改,要改动的代码量将不可想象。另外一方面,假如要换数据库 产品或者运行环境也多是个不可能完成的任务。而用户的运行环境和要求却千差万别,咱们不可能为每个用户每一种运行环境设计一套同样的系统。
所 以就要将同样的处理代码即业务逻辑和可能不同的处理即数据存取逻辑分离开来,另外一方面,关系型数据库中的数据基本都是以一行行的数据进行存取的,而程序 运行倒是一个个对象进行处理,而目前大部分数据库驱动技术(如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 实现框架比这个要复杂的多。get

相关文章
相关标签/搜索