1.1 ORM简介
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。
1.2 ORM与DB Helper Library
许多Helper提供了很多的强大的功能,封闭交互底层,实体类支持,提供SQL翻译功能。ORM比之这些Helper只是多提供了一层,他尝试封闭的自动化的(或是映射文件)来实现关联。以前,这都是我们手打的。ORM试图取代helper,为此提供了更多的功能。
1.3 优缺点
1.3.1 优点:
1.抛弃了传统的面向过程的方法,远离数据库和SQL,使开发更多的面向业务领域;
2.ORM实现的系统,具有很强的可维护性,很快满足用户需求的变更;
3.ORM使我们摆脱了SQL,但并不代表我们不再使用SQL,事实上,复杂的查询和报表我仍然推荐使用SQL,良好的系统应该可以兼容以前的方式;
4.ORM更适合复杂的系统(这里使用复杂,而不是大型),而不是小的系统,因为这样的系统要求建造速度快,系统稳定,他们的业务规则异常的复杂,但他们对系统的性能要求并不是很高(相对电信这样的性能要求)。
1.3.2 缺点:
1.性能问题,带来大约20%的性能损失(ORM无法解决每个对象实例在构造时分配内存所耗的时间);现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。
2.项目初期,需要写的代码比常规的要多很多,而且有些代码不一定马上就用;
1.4 ORM框架
只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。当前ORM框架主要有三种:Hibernate(Nhibernate),iBATIS,EclipseLink。
设计思路其实很简单,和其余的ORM框架一样。通过某种关系来维持实体对象和数据库之间的关系,然后通过实体对象的操作来实现数据库的操作。
1.5 ORM一般包括四部分
1.5.1 第一部分
一个对持久类对象进行CRUD操作的API;
JPA |
EntityManager (由EntityManagerFactory创建) |
Hibernate |
Session (由SessionFactory创建) |
1.5.2 第二部分
一个语言或API用来规定与类和类属性相关的查询;
JPA |
JPQL语言 (Query接口) |
Hibernate |
HQL语言 (Query接口) |
1.5.3 第三部分
一个规定MAPPING METADATA的工具;
JPA |
用注解 |
Hibernate |
*.hbm.xml |
1.5.4 第四部分
一种技术可以让ORM的实现同事务对象一起进行DIRTYCHECKING,LAZY ASSOCIATION FETCHING以及其他的优化操作。
JPA |
JpaTransactionManager |
Hibernate |
Transaction |