JPA/Hibernate/Spring Data概念

【從零開始學習Spirng Boot—常見異常彙總】程序員

事情的起源,無心當中在一個羣裏看到這麼一句描述:」有人麼?默默的問一句,如今開發用mybatis仍是hibernate仍是jpa」?而後你們就進行各類回答,可是沒有有質疑這句話描述的合理性,我的以爲須要清楚概念的,在這裏mybatis你們確定是沒有什麼疑問,咱們把上面那句話更改下,方便咱們拋出一些點出來,去掉mybatis修改成:「如今開發是使用hibernate仍是jpa」?那麼在這裏的話,咱們就要清楚hibernate/jpa/springspring

data/spring data jpa到底怎麼一個關係?數據庫

什麼是JPA?編程

JPA全稱Java Persistence API.JPA經過JDK 5.0註解或XML描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。百度百科JPAmybatis

在上面只是一個JPA的定義,咱們看看另一段更能看出是什麼的描述:架構

JPA(Java Persistence API)是Sun官方提出的Java持久化規範。它爲Java開發人員提供了一種對象/關係映射工具來管理Java應用中的關係數據。app

在這段話就比較清晰了,這裏有一個關鍵詞「持久化規範」。咱們能夠拆成兩部分進行解讀「持久化」、「規範」。所謂的持久化是將程序數據在瞬時數據(好比內存中的數據)轉換爲持久數據(好比:保存到數據庫中,磁盤文件…)。這個我的粗糙的描述,看看專業的描述,以下:框架

持久化(Persistence),即把數據(如內存中的對象)保存到可永久保存的存儲設備中(如磁盤)。持久化的主要應用是將內存中的對象存儲在的數據庫中,或者存儲在磁盤文件中、XML數據文件中等等。編程語言

持久化是將程序數據在持久狀態和瞬時狀態間轉換的機制。工具

JDBC就是一種持久化機制。文件IO也是一種持久化機制。

好了,上面已經描述很清楚了,咱們在說說「規範」: 所謂的規範意指明文規定或約定俗成的標準。如:道德規範、技術規範,公司管理規範。

那麼「持久化規範」就是Sun針對持久化這一層操做指定的規範,若是沒有指定JPA規範,那麼新起的框架就隨意按照本身的標準來了,那咱們開發者的世界就玩完了,咱們就無法把咱們的經歷所有集中在咱們的業務層上,而是在想咱們進行兼容了,這種狀況有點像Android開發,Android自己有官方的SDK,可是因爲SDK過於開源了,結果致使不少廠商基於SDK二次開發,可是開發完兼容性就不是很好,最好的例子就是Android的頭像上傳,就是一件很煩人的事情。好了,JPA就嘮叨到這裏。

什麼是Hibernate?

這裏引用百度百科的話hibernate:

Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了很是輕量級的對象封裝,它將POJO與數據庫表創建映射關係,是一個全自動的orm框架,hibernate能夠自動生成SQL語句,自動執行,使得Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。Hibernate能夠應用在任何使用JDBC的場合,既能夠在Java的客戶端程序使用,也能夠在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate能夠在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。

在上面這段描述中抓住核心的一句話就能夠了「是一個全自動的ORM框架」。那麼是ORM呢? ORM是對象關係映射的意思,英語:Object Relational Mapping簡稱ORM,是一種程序技術,用於實現面向對象編程語言裏不一樣系統類型的系統之間的數據轉換。好了,更多的概念須要本身去挖掘,這裏只是拋裝引玉下。

什麼是Spring Data?

Spring Data是一個用於簡化數據庫訪問,並支持雲服務的開源框架。其主要目標是使得數據庫的訪問變得方便快捷,並支持map-reduce框架和雲計算數據服務。此外,它還支持基於關係型數據庫的數據服務,如Oracle

RAC等。對於擁有海量數據的項目,能夠用Spring Data來簡化項目的開發,就如Spring Framework對JDBC、ORM的支持同樣,Spring Data會讓數據的訪問變得更加方便。

在上面這段描述中我以爲核心的就是「Spring Data是用於簡化數據庫訪問,支持雲服務的開源框架」。因此Spring Data自己就是一個開源的框架。

什麼是Spring Data JPA?

咱們先看一個描述:

Spring Data JPA能幹什麼

能夠極大的簡化JPA的寫法,能夠在幾乎不用寫實現的狀況下,實現對數據的訪問和操做。除了CRUD外,還包括如分頁、排序等一些經常使用的功能。

首先咱們須要清楚的是Spring Data是一個開源框架,在這個框架中Spring Data JPA只是這個框架中的一個模塊,因此名稱才叫Spring

Data JPA。若是單獨使用JPA開發,你會發現這個代碼量和使用JDBC開發同樣有點煩人,因此Spring Data JPA的出現就是爲了簡化JPA的寫法,讓你只須要編寫一個接口繼承一個類就能實現CRUD操做了。

JPA/Hibernate關係?

咱們先看下別人的描述:

Jpa是一種規範,而Hibernate是它的一種實現。除了Hibernate,還有EclipseLink(曾經的toplink),OpenJPA等可供選擇,因此使用Jpa的一個好處是,能夠更換實現而沒必要改動太多代碼。

從上面這個描述,咱們能就是能看出: JPA定義了一個規範,Hibernate是其中的一種實現方式能夠,因此咱們能夠說:Hibernate是JPA的一種實現方式。可是這麼說就有點欠穩當了:開發是使用hibernate仍是jpa。若是你回答使用JPA的話,那麼你根本作不了什麼事情,由於你須要使用它具體的一種實現方式,好比:Hibernate,EclipseLink,toplink。若是回答說是使用Hibernate的話,還勉強說的過去,可是在Hibernate中也有JPA的影子。可是這裏不要形成一個誤解,hibernate必定依賴JPA什麼之類的,JPA如今只是Hibernate功能的一個子集。Hibernate從3.2開始,開始兼容JPA的。Hibernate3.2得到了Sun

TCK的JPA(JavaPersistence API)兼容認證。

那麼咱們在描述的時候,別人問你持久化具體使用了什麼,咱們能夠說:使用了基於Hibernate實現的JPA,或者是Hibernate JPA,那麼加上spring data的,咱們通常都簡化說:spring data jpa,通常默認的就是使用了hibernate進行實現,如今網上這方面的資料也比較多,可能就約定俗成了。固然你要別人清楚的話,能夠本身在進行補充下。

好了,這個困惑就到這裏,在這裏就是博主我的的一些看法,有什麼個別的看法均可以在評論中探討,若有錯誤之處,請指正。

這篇也是博主花了一些心血去梳理的,請你們都都支持。

視頻+交流平臺:

àSpring Boot網易雲課堂視頻

study.163.com/course/intr…

àSpring Boot交流平臺

412887952-qq-com.iteye.com/blog/232153…

相關文章
相關標籤/搜索