-
1 # 無名103905306
-
2 # 會點程式碼的大叔
選擇哪一種框架,需要結合專案實際來,結合業務場景和團隊成員的能力,綜合考慮並選擇技術方案。
先和大家講講每一種框架是啥Hibernate:POJO與資料庫表建立對映關係;Java程式設計師可以使用操作物件的思維操作資料庫。(POJO就是Java Bean,只有有屬性、set、get方法)
Mybatis:做的是POJO與SQL之間的對映關係;程式設計師需要編寫SQL;
Spring Data JPA:有人說它是對Hibernate更高階的封裝,這種說法是有一些問題的;第二部分詳細說明一下。
要解釋清楚Spring Data JPA是什麼,需要一步步說起期初Java需要透過各個資料庫廠商提供的API進行資料庫的訪問,後來JAVA提出了JDBC,程式直接使用JDBC這套規範就可以跟各個資料庫進行對接;
接著誕生了ORM技術,簡化了Java物件的持久化工作,出現了Hibernate、TopLink等ORM框架;
Sun公司在JDK1.5的時候,吸收了Hibernate、TopLink等ORM框架的優點,提出了Java持久化規範:JPA;
Hibernate在3.2的時候提供了JPA的實現,其餘的JPA的供應商還有諸如OpenJPA、Toplink等;
Spring在做持久化這一塊的工作,開發了Spring-data-xxx這一系列包,如:Spring-data-jpa,Spring-data-redis,Spring-data-mongodb等等,這些都是Spring 提供的基於JPA和其他一些NOSQL的Repository。
Spring data JPA 是在JPA規範的基礎下提供了Repository層的實現,但是使用哪一款ORM需要你自己去決定;相比我們更為熟悉的Hibernate和MyBatis,Spring Data JPA可以看做更高層次的抽象。
使用Spring data JPA,預設底層是Hibernate,但是可以修改成其他的ORM框架。
幾種框架的優劣Hibernate開發難度較大,學習週期長;但是可以讓開發者無需關心SQL,更專注業務流程;HQL不關心資料庫的型別,所以遷移起來很方便;
Mybatis需要手動編寫SQL語句(更直觀),可更直接地對SQL進行最佳化,但是資料庫移植性差;
Spring Data JPA簡化了資料庫訪問,可以透過命名規範編寫SQL,如果SQL較為複雜,還是需要透過註解的方式編寫SQL;它更適用於現在微服務的架構(微服務的極致都是單表操作)。
從個人的角度:MyBatis>Spring Data JPA>Hibernate,或者MyBatis + Spring Data JPA。
-
3 # 定格往憶
JPA: J2EE資料持久化的規範
JPA規範實現:Hibernate
Spring Data JPA: 本質也是藉助Hibernate實現JPA規範,並提供了很多資料庫互動的介面,容易快速上手
hibernate相比mybatis較重,如果只是簡單業務藉助於HQL語言可以提高開發效率。mybatis相比hibernate比較靈活,近乎原生的sql操作,處理複雜邏輯或者sql調優優勢巨大,目前我接觸的IT公司基本清一色的mybatis
回覆列表
如果沒有更換不同資料庫可能,Mybatis 可能更好一些,現在的Mybatis不光只有原生,什麼操作都得寫SQL了,自動增刪改查單表的外掛也很多了,而且自動分頁外掛也有,都挺優秀。關於Hibernate和Spring Data Jpa本質基本一樣,Hibernate是JPA標準的一種實現,同為JPA實現的還有Eclipselink 、OpenJPA。這樣Hibernate就是Spring Data Jpa的預設執行器,同時Spring Data Jpa也有Eclipselink的實現,在實際使用中JPQL(HQL)會出現方法不足的情況最後還是得用SQL,比如像xxx,xxx,xxx這樣的資料,JPA和HQL中沒有實現,但是在MySQL中有一個find in set方法。