什么是ORM
对象-关系-映射(Object-Relational Mapping,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。基于关系型数据库的数据存储,实现一个虚拟化的面向对象的数据访问接口。
ORM是为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。ORM是对JDBC的封装。
ORM的优势:
首先,让我们来做下比较,在同等条件同等数据量的情况,不使用ORM与使用ORM相比,显然不使用ORM执行时间会快那么一点点,但这点你很快就觉得没什么可值得骄傲的了:比如你在某次页面数据交互中,因使用ORM执行时间用了200ms,而没有使用ORM执行时间只须要190ms,提高了10ms啊!!!如果你做的是底层,提高的是CPU运算速度或者是I/O的速度,确实不赖。而这里是信息系统,这些在用户面前根本就感觉不到,即使你用了210ms、220ms用户也不关心这些,然而为了能够提高这些微不足道的x毫秒,你却要写大量重复的代码,不停的Ctrl+C/Ctrl+V,最后代码日积月累,你的代码行确实增加了,而且很快,日复一日,年复一年…恭喜,你终于成为一个代码量超过x万行的伟大的代码民工(不享受农民工待遇的“高级高素质”IT民工)!其实通过Cache的实现,能够实现对性能的调优。
  
  其次,从项目周期和开发进度上来说,ORM无疑提供了最佳方案。对象映射可以使业务对象与数据库分离,使数据库层透明,开发人员真正的面向对象。ORM通过对开发人员隐藏SQL细节可以大大的提高生产力。没有哪个项目不计成本,无限制拖延下去的,多数是尽少投入尽快完成,还要易维护。使用ORM可以大大降低学习和开发成本。实际开发中,真正对客户有价值的是其独特的业务功能,而不应该把大量时间花费在写数据访问、增删改查(CRUD)方法、后期的Bug查找和维护上。在使用ORM后,ORM框架已经把数据库变成了我们所熟悉的实体对象,我们只需了解面向对象开发就可以实现数据库应用程序的开发,不需要浪费时间在SQL上。同时也可减少代码量,减少数据层出错机会。
  再次,从职业生涯规划和人员能力提升方面,ORM因为节省大量的开发时间,无疑可以让开发人员有机会去做更有意义的事情,涉猎更多的知识。如果某人始终从事的都是这些模式重复的代码开发,顶多就是个熟练工。
  最后,从根本上讲,当前信息系统开发基本上都是基于面向对象和关系数据库的,而面向对象是从软件工程基本原则(如耦合、聚合、封装、继承、多态),而关系数据库则是从数学理论(如关系模型、关系代数、关系运算、函数依赖)发展而来的,两套理论存在显著的区别。ORM就是为解决这个不匹配的现象而产生的。所以从某种意义讲,在ORM还未完全普遍存在的情况下,这种CRUD,也为想进入IT行业的一些青年提供了入门的机会;如果某天ORM像SQL语句或程序的顺序、分支、循环一样普遍,这样的IT从业者,何去何从还另当别论,然而国人大多数开发人员都是做CRUD的。

主流ORM框架简介
目前流行的ORM框架有如下这些产品:

  1. EJB:Enitiy EJB实际上也是一种ORM技术,这是一直备受争议的组件技术。事实上,EJB为Java EE的蓬勃发展赢得了极高的声誉,EJB作为一种重量级、高花费的ORM技术具有不可比拟的优势。就其他架构设计来讲,依然非常优秀。即使现在十分流行的轻量级Java EE架构,其实质是对经典Java EE架构的模仿——虽然存在些许的改进。EJB3.1也采取了低侵入式的设计,增加了Annotation,也具有极大的吸引力。
  2. Hibernate:目前最流行的开源ORM框架,已经被选作JBoss的持久层解决方案。整个HIbernate项目也一并投入了Jboss的怀抱,而JBoss又加入了RedHat组织,所以现在Hibernate属于RedHat 的一部分。Hibernate 灵巧的设计、优秀的性能,还有其丰富的文档都是其风靡全球的重要因素。
    Hibernate的应用场景:快速迭代,适合使用面向对象的持久层框架。再开发过程中对象的变更非常频繁。这种持久层框架适合快速重构,提高开发效率。
  3. iBatis:Apache软件基金组织的子项目。与其称它为一种ORM框架,不如称它为一中“SQL Mapping”框架。曾经在J2EE的开发中扮演非常重要的角色,但因为不支持存粹的面向对象操作,因此现在逐渐地被取代。但是在一些公司,依然占有一席之地,特别是一些对数据访问特别灵活的地方,iBatis更加的灵活,它允许开发人员直接编写SQL语句。
  4. MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
    mybatis的着力点,则在于POJO 与SQL之间的映射关系。然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。 相对Hibernate“O/R”而言,mybatis是一种“Sql Mapping”的ORM实现。
    Mybatis的应用场景:
    它封装少、高性能·可优化、维护简单等优点成为了目前java移动互联网网站服务的首选持久层框架,它特别适合分布式和大数据网络数据库编程。
    系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的sql语句(或存储过程)才能达到系统性能设计指标,在这种情况下Mybatis会有更好的可控性和表现,可以进行细粒度的优化。
  5. JPA (Java Persistence API)是Sun 官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束在Hibernate,TopLink,JDO等ORM框架各自为营的局面。JPA是在充分吸收了现有的Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。、
    JPA是一套规范,而不是一套产品。hibernate已经是一套产品了。JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,JDO,TopLink等ORM框架各自为营的局面。
    JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。那么Hibernate是如何实现与JPA的这种关系的呢。Hibernate主要是通过三个组件来实现的,及hibernate-annotation、hibernate-entitymanager和hibernate-core。

小结:JPA规范的推出,参考了之前Hibernate的实现方式,主要是想要统一java中ORM的世界,JPA推出后,Hibernate对JPA进行了积极地拥护和实现