JPA由EJB 3.0软件专家组开发,做为JSR-220实现的一部分。但它不囿于EJB 3.0,你能够在Web应用、甚至桌面应用中使用。JPA的宗旨是为POJO提供持久化标准规范,因而可知,通过这几年的实践探索,可以脱离容器独立运行,方便开发和测试的理念已经深刻人心了。目前Hibernate 3.二、TopLink 10.1.3以及OpenJPA都提供了JPA的实现
java
JPA(Java Persistence API)是SUN官方推出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工做和整合ORM技术,结束如今Hibernate,TopLink,JDO等ORM框架各自为营的局面。值得注意的是,JPA是在充分吸取了现有Hibernate,TopLink,JDO 等ORM框架的基础上发展而来的,具备易于使用,伸缩性强等优势。从开发社区的反映上看,JPA手动极大的支持和赞赏,其中就包括了Spring与EJB3.0的开发团队,着眼将来几年的技术走向,JPA做为ORM领域的标准化者的目标应该不难实现。
JPA包括一下三方面的技术
*ORM映射元数据
JPA支持XML和JDK5.0注释两种元数据形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
*Java持久化API
用来操做实体对象,执行CRUD操做,框架在后台替咱们完成全部的事情,开发者能够从繁琐的JDBC和SQL代码中解脱出来。
*查询语言(JPQL)数据库
这是持久化操做中很重要的一个方面,经过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。编程
JPA 是 JCP 组织发布的 Java EE 标准之一,所以任何声称符合 JPA 标准的框架都遵循一样的架构,提供相同的访问 API,这保证了基于JPA开发的企业应用可以通过少许的修改就可以在不一样的JPA框架下运行。设计模式
JPA 框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的做用。架构
JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下建立实体和建立Java 类同样简单,没有任何的约束和限制,只须要使用 javax.persistence.Entity进行注释;JPA的框架和接口也都很是简单,没有太多特别的规则和设计模式的要求,开发者能够很容易的掌握。JPA基于非侵入式原则设计,所以能够很容易的和其它框架或者容器集成。并发
JPA的查询语言是面向对象而非面向数据库的,它以面向对象的天然语法构造查询语句,能够当作是Hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操做对象是实体,而不是关系数据库的表,并且可以支持批量更新和修改、JOIN、GROUP BY、HAVING 等一般只有 SQL 才可以提供的高级查询特性,甚至还可以支持子查询。框架
JPA 中可以支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持可以让开发者最大限度的使用面向对象的模型设计企业应用,而不须要自行处理这些特性在关系数据库的持久化。ide
JPA不是一种新的ORM框架,他的出现只是用于规范现有的ORM技术,他不能取代现有的Hibernate,TopLink等ORM框架。相反,在采用JPA开发时,咱们仍将用到这些ORM框架,只是此时出来的应用再也不依赖与某个持久化供应商。应用能够在不修改代码的状况下在任何JPA环境下运行,真正作到低耦合,可扩展的程序设计。 简单说,JPA干的就是Hibernate干的活,他们的做用是同样的。可是,JPA只是一套规范,不是一套产品,Hibernate已是一套产品了。工具
JPA主要是为了简化现有的持久化开发工做和整合ORM技术,结束如今Hibernate,Toplink,JDO等ORM框架各自为营的局面。以前学的Hibernate,实际上咱们面对的是Hibernate的API进行开发,这有什么很差哪,是咱们跟Hibernate这个产品紧密的耦合在了一块儿,若是离开了Hibernate咱们是没法在别的ORM框架中使用咱们的应用。使用JPA后,你的应用就能够运行在实现了JPA规范的持久化产品中(如Hibernate,TopLink,JDO)
JPA这门技术是将来发展的必然趋势,之后咱们要采用ORM技术呢,咱们就不会在面对Hibernate编程,不会在面对TopLink编程,而是面对JPA规范编程,就是说,过了几年以后,咱们的应用就会不多面对Hibernate API进行编程,这是为何呢,这就比如之前咱们访问数据库同样,假设没有JDBC这门技术的话,咱们跟各个数据库连接只能使用各个数据库厂商给咱们提供的API进行数据库连接了,自从有了JDBC后,咱们就再也不须要面对数据库厂商给咱们提供的API进行数据库进行连接了,而是直接使用JDBC这套规范就能够跟各个数据库进行对接。目前JPA跟Hibernate,TopLink的关系也是同样的,JPA就和JDBC同样提供一种通用的,访问各个ORM实现产品的桥梁工具。经过JPA技术,咱们只须要面对它的规范编程,编出的应用就能够应用在各个持久化产品中(包括Hibernate和TopLink),就是说底层产品对我来讲已经不重要了。性能
JPA 的目标之一是制定一个能够由不少供应商实现的API,而且开发人员能够编码来实现该API,而不是使用私有供应商特有的API。所以开发人员只需使用供应商特有的API来得到JPA规范没有解决但应用程序中须要的功能。尽量地使用JPA API,可是当须要供应商公开可是规范中没有提供的功能时,则使用供应商特有的API。
1.Hibernate
2.Spring
3.OpenJPA
4.其它
目前支持的实现包括Toplink、Hibernate Entitymanager等。TopLink之前须要收费,现在开源了。OpenJPA虽然免费,但功能、性能、普及性等方面更加须要加大力度。
JPA是一套规范,Hibernate,TopLink,JDO他们是一套产品,这些产品实现了这个JPA规范,JPA有点像JDBC,为各类不一样的ORM技术提供一个统一的接口,方便把应用移植的不一样的ORM技术上。