JAVA编程
JPA简介
JPA通过JDK 5.0注解或XML描写政策-联络表的映射联络,并将作业期的实体政策耐久化到数据库中。
来历
Sun引入新的JPA ORM标准出于两个缘由:其一,简化现有Java EE和Java SE运用的政策耐久化的开发作业;其二,Sun希望联络对ORM技术,结束全国归一。
JPA由EJB 3.0软件专家组开发,作为JSR-220结束的一部分。但它不囿于EJB 3.0,你可以在Web运用、甚至桌面运用中运用。JPA的意图是为POJO供应耐久化标准标准,由此可见,通过这几年的实习探求,可以脱离容器独立运行,便当开发和检验的理念现已众所周知了。当时Hibernate 3.2、TopLink 10.1.3以及OpenJPA都供应了JPA的结束。
JPA的全体思维和现有Hibernate、TopLink,JDO等ORM布局大体一致。总的来说,JPA包括以下3方面的技术:
ORM映射元数据
JPA支撑XML和JDK 5.0注解两种元数据的方法,元数据描写政策和表之间的映射联络,布局据此将实体政策耐久化到数据库表中;
JPA的API
用来操作实体政策,实行CRUD操作,布局在后台替我们结束悉数的作业,开发者从繁琐的JDBC和SQL代码中脱节出来。
查询言语
这是耐久化操作中很重要的一个方面,通过面向政策而非面向数据库的查询言语查询数据,避免程序的SQL语句紧密耦合。
JPA的优势
1标准化
JPA是JCP组织发布的Java EE标准之一,因此任何声称符合JPA标准的布局都遵照一样的架构,供应一样的访问API,这保证了依据JPA开发的公司运用可以通过少量的批改就可以在不一样的JPA布局下作业。
2对容器级特性的支撑
JPA布局中支撑大数据集、业务、并发等容器级业务,这使得JPA跨越了简略耐久化布局的捆绑,在公司运用发扬更大的作用。
3简略易用,集成便当
JPA的首要政策之一便是供应更加简略的编程模型:在JPA布局下创建实体和创建Java类一样简略,没有任何的捆绑和捆绑,只需要运用javax.persistence.Entity进行注释;JPA的布局和接口也都非常简略,没有太多分外的规则和描写方式的需要,开发者可以很简略的掌握。JPA依据非侵入式原则描写,因此可以很简略的和其它布局或许容器集成。
4可比美JDBC的查询才干
JPA的查询言语是面向政策而非面向数据库的,它以面向政策的天然语法布局查询语句,可以当作是Hibernate HQL的等价物。JPA定义了一同的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种拓宽,它是关于实体的一种查询言语,操作政策是实体,而不是联络数据库的表,并且可以支撑批量更新和批改、JOIN、GROUP BY、HAVING等通常只需SQL才可以供应的高级查询特性,甚至还可以支撑子查询。
JPA简介(2)
5支撑面向政策的高级特性
JPA中可以支撑面向政策的高级特性,如类之间的继承、多态和类之间的凌乱联络,这样的支撑可以让开发者最大极限的运用面向政策的模型描写公司运用,而不需要自行处置这些特性在联络数据库的耐久化。
JPA的供货商
JPA的政策之一是拟定一个可以由许多供货商结束的API,并且开发人员可以编码来结束该API,而不是运用私有供货商特有的API。因此开发人员只需运用供应商特有的API来获得JPA标准没有处置但运用程序中需要的功用。尽可以地运用JPA API,可是当需要供货商揭穿可是标准中没有供应的功用时,则运用供货商特有的API。
1 Hibernate
JPA是需要Provider来结束其功用的,Hibernate便是JPA Provider中很强的一个,当时来说大约无人能出其右。从功用上来说,JPA如今便是Hibernate功用的一个子集。Hibernate从3.2初步,就初步兼容JPA。Hibernate3.2获得了Sun TCK的JPA(Java Persistence API)兼容认证。
只需知道Hibernate或许其他ORM布局,在运用JPA时会发现其实非常简略上手。例如实体政策的情况,在Hibernate有自由、耐久、游离三种,JPA里有new,managed,detached,removed,明眼人一看就知道,这些情况都是一一对应的。再如flush方法,都是对应的,而其他的再如说Query query = manager.createQuery(sql),它在Hibernate里写法上是session,而在JPA中变成了manager,所以从Hibernate到JPA的价值大约是非常小的。
一样,JDO,也初步兼容JPA。在ORM的领域中,看来JPA现已是王道,标准便是标准。在各大厂商的支撑下,JPA的运用初步变得广泛。
2 Spring
Spring + Hibernate常常被称为Java Web运用人气最旺的布局组合。而在JCP通过的Web Beans JSR,却欲将JSF + EJB + JPA、来自JBoss Seam(Spring在外)的一些组件和EJB 3(当时可以供应有底子阻挠和依托写入功用的简化Session Bean布局)的一个Web组合进行标准化。如今的Spring 2.0为JPA供应了无缺的EJB容器契约,容许JPA在任何环境内可以在Spring处置的效力层运用(包括Spring的悉数AOP和DI增强)。一同,关于下一个Web运用组合会是EJB、Spring + Hibernate仍是Spring + JPA的论争,早已充满于耳。
在Spring2.0.1中,正式供应对JPA的支撑,这也促成了JPA的展开,要知道JPA的长处在于可以分别于容器作业,变得更加的简练。
3 OpenJPA
OpenJPA是Apache组织供应的开源项目,它结束了EJB 3.0中的JPA标准,为开发者供应功用强壮、运用简略的耐久化数据处置布局。OpenJPA封装了和联络型数据库交互的操作,让开发者把注意力会合在编写业务逻辑上。OpenJPA可以作为独立的耐久层布局发扬作用,也可以轻松的与其它Java EE运用布局或许符合EJB 3.0标准的容器集成。
JPA简介(3)
4其它
当时支撑的结束包括Toplink、Hibernate Entitymanager等。TopLink从前需要收费,如今开源了。OpenJPA虽然免费,但功用、功用、普及性等方面更加需要加大力度。
关于EJB来说,实体Bean一直是被批评的政策,因为其太凌乱和无穷。JPA的出现,很大程度的分别了凌乱性。这让EJB的推广也变得简略。
言而总归,JPA标准首要注重的仅是API的举动方面,而由各种结束结束大多数功用有关的调优。虽然如此,悉数可靠的结束都大约具有某种数据缓存,以作为选择。希望不久的将来,JPA能成为实在的标准。
小结
EJB 3.0和JPA毫无疑问将是Java EE 5的首要卖点。在某些领域中,它们给Java社区带来了比赛优势,并使Java在其他领域与比赛对手不分伯仲(因为,不可否认,当时某些领域尚不存在依据标准的方法)。
以前数年来,Spring Framework一直是EJB在公司领域的首要比赛对手。EJB3.0标准处置了许多推动Spring兴起的疑问。跟着它的出现,EJB3.0毫无疑问比Spring供应了非常好的开发领会——最众所周知的优势是它不需要配置文件。
JPA供应一种标准的OR映射处置计划,该处置计划完全集成到EJB3。0兼容的容器中。JPA的老一辈将会继续安稳展开,可是业务运用程序中的raw运用将可以会减少。结束JPA兼容的实体处置器如同很可以是此类技术的展开方向。
Java EE系列标准的较大疑问与JPA没有任何联络。Java EE系列标准的疑问涉及到Web和EJB容器之间的集成。Spring在此领域仍然具有首要比赛优势。JBoss的Seam项目检验运用自定义的方法来处置这一疑问。
Caucho Resin运用效力器妄图拓宽容器距离并支撑在Web容器中运用@EJB注释。我们希望Java EE 5.1将处置层集成的疑问,为我们供应一个悉数而标准的依托性写入方法。
在不久的将来,Sun可以会将JPA作为一个单独的JSR对待,一同JPA还可以作为Java SE的一部分。不过这些都不太重要,重要的是,我们如今现已可以在脱离容器的情况下、在Java SE运用中运用JPA了。
JPA现已作为一项政策耐久化的标准,不但可以获得Java EE运用效力器的支撑,还可以直接在Java SE中运用。开发者将无需在现有多种ORM布局中艰难地选择,按照Sun的意料,现有ORM布局头顶的光环将逐步暗淡,不再具有以往的吸引力。