12.JPA規(guī)范

什么是JPA

Spring Data JPA入門

JPA(Java Persistence API)是Sun官方提出的Java持久化規(guī)范。它為Java開發(fā)人員提供了一種對(duì)象/關(guān)聯(lián)映射工具來管理Java應(yīng)用中的關(guān)系數(shù)據(jù)。它的出現(xiàn)主要是為了簡化現(xiàn)有的持久化開發(fā)工作和整合ORM技術(shù)結(jié)束現(xiàn)在Hibernate、TopLink等ORM框架各自為營的局面。

ORM:通過使用描述對(duì)象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫中。本質(zhì)就是將數(shù)據(jù)從一種形式轉(zhuǎn)換到另外一種形式。

JPA是在充分吸收了現(xiàn)有Hibernate、TopLink等ORM框架的基礎(chǔ)上發(fā)展起來的,具有易于使用,伸縮性強(qiáng)等優(yōu)點(diǎn)。

注意: JPA不是一種新的ORM框架,它的出現(xiàn)只是用于規(guī)范現(xiàn)有的ORM技術(shù),它不能取代現(xiàn)有的Hibernate等ORM框架,相反,采用JPA開發(fā)時(shí),我們?nèi)詫⑹褂眠@些ORM框架,只是此時(shí)開發(fā)出來的應(yīng)用不在依賴于某個(gè)持久化提供商。應(yīng)用可以在不修改代碼的情況下在任何JPA環(huán)境下運(yùn)行,真正做到低耦合,可擴(kuò)展的程序設(shè)計(jì)。類似于JDBC,在JDBC出現(xiàn)以前,我們的程序針對(duì)特性的數(shù)據(jù)庫API進(jìn)行編程,但是現(xiàn)在我們只需要針對(duì)JDBC API編程,這樣能夠在不改變代碼的情況下就能換成其他的數(shù)據(jù)庫。

JPA是一套規(guī)范,不是一套產(chǎn)品。Hibernate是一套產(chǎn)品,如果這些產(chǎn)品實(shí)現(xiàn)了JPA規(guī)范,那么我們可以叫它們?yōu)镴PA的實(shí)現(xiàn)產(chǎn)品。使用JPA,就可以把我們的應(yīng)用完全從Hibernate中解脫出來。
JPA規(guī)范與ORM框架的關(guān)系如下圖:


JPA規(guī)范與ORM框架

JPA是目前比較流行的一種ORM技術(shù)之一,所以他擁有ORM技術(shù)的各種特點(diǎn),當(dāng)然他還有自己的一些優(yōu)勢:

1、標(biāo)準(zhǔn)化
  • JPA 是 JCP 組織發(fā)布的 Java EE 標(biāo)準(zhǔn)之一,因此任何聲稱符合 JPA 標(biāo)準(zhǔn)的框架都遵循同樣的架構(gòu),提供相同的訪問 API,這保證了基于JPA開發(fā)的企業(yè)應(yīng)用能夠經(jīng)過少量的修改就能夠在不同的JPA框架下運(yùn)行。
2、對(duì)容器級(jí)特性的支持
  • JPA 框架中支持大數(shù)據(jù)集、事務(wù)、并發(fā)等容器級(jí)事務(wù),這使得 JPA 超越了簡單持久化框架的局限,在企業(yè)應(yīng)用發(fā)揮更大的作用。
3、簡單易用,集成方便
  • JPA的主要目標(biāo)之一就是提供更加簡單的編程模型:在JPA框架下創(chuàng)建實(shí)體和創(chuàng)建Java 類一樣簡單,沒有任何的約束和限制,只需要使用 javax.persistence.Entity進(jìn)行注釋;JPA的框架和接口也都非常簡單,沒有太多特別的規(guī)則和設(shè)計(jì)模式的要求,開發(fā)者可以很容易的掌握。JPA基于非侵入式原則設(shè)計(jì),因此可以很容易的和其它框架或者容器集成。
4、可媲美JDBC的查詢能力
  • JPA的查詢語言是面向?qū)ο蠖敲嫦驍?shù)據(jù)庫的,它以面向?qū)ο蟮淖匀徽Z法構(gòu)造查詢語句,可以看成是hibernate HQL的等價(jià)物。JPA定義了獨(dú)特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴(kuò)展,它是針對(duì)實(shí)體的一種查詢語言,操作對(duì)象是實(shí)體,而不是關(guān)系數(shù)據(jù)庫的表,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級(jí)查詢特性,甚至還能夠支持子查詢。
5、支持面向?qū)ο蟮母呒?jí)特性
  • JPA 中能夠支持面向?qū)ο蟮母呒?jí)特性,如類之間的繼承、多態(tài)和類之間的復(fù)雜關(guān)系,這樣的支持能夠讓開發(fā)者最大限度的使用面向?qū)ο蟮哪P驮O(shè)計(jì)企業(yè)應(yīng)用,而不需要自行處理這些特性在關(guān)系數(shù)據(jù)庫的持久化。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容