什麼是JPA

起源

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的優點

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 纔可以提供的高級查詢特性,甚至還可以支持子查詢。框架

5 支持面向對象的高級特性

  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的供應商

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技術上。

相關文章
相關標籤/搜索