Spring Data JPA 與 MyBatis 適用場景對比

兩種框架本身都用過一段時間,如今想總結一下各自適用的場景,部分比較取自羣友分享程序員

框架簡介sql

Spring Data JPA是Spring Data的子模塊。使用Spring Data,使得基於「repositories」概念的JPA實現更簡單和容易。Spring Data JPA的目標是大大簡化數據訪問層代碼的編碼。做爲使用者,咱們只須要編寫本身的repository接口,接口中包含一些個性化的查詢方法,Spring Data JPA將自動實現查詢方法。
JPA默認使用hibernate做爲ORM實現,因此,通常使用Spring Data JPA即會使用hibernate。咱們再看看hibernate的官方概念,Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了很是輕量級的對象封裝,它將POJO與數據庫表創建映射關係,是一個全自動的orm框架,hibernate能夠自動生成SQL語句,自動執行,使得Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。數據庫

MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。編程

比較mybatis

維度一:hibernate是面向對象的,而MyBatis是面向關係的框架

1.面向對象考慮的是對象的整個生命週期包括在對象的建立、持久化、狀態的改變和行爲等,對象的持久化只是對象的一種狀態,而面向關係型數據庫的概念則更關注數據的高效存儲和讀取;
2.面向對象更強調對象狀態的封裝性,對象封裝本身的狀態(或數據)不容許外部對象隨意修改,只暴露一些合法的行爲方法供外部對象調用;而關係型數據庫則是開放的,能夠供用戶隨意讀取和修改關係,並能夠和其餘表任意的關聯(只要sql正確容許的狀況下);
3.面向對象試圖爲動態的世界建模,他要描述的是世界的過程和規律,進而適應發展和變化,面向對象老是在變化中處理各類各樣的變化。而關係型模型爲靜態世界建模,它經過數據快照記錄了世界在某一時候的狀態,它是靜態的。異步

維度二:從項目功能類型比較(這個真心須要JPA的高手哦,請定位清晰再參考)微服務

數據分析型的OLAP應用適合用MyBatis,事務處理型OLTP應用適合用JPA。 
越是複雜的業務,越須要領域建模,建模用JPA實現最方便靈活。可是JPA想用好,門檻比較高,不懂DDD的話,就會淪爲增刪改查了。 
複雜的查詢應該是經過CQRS模式,經過異步隊列創建合適查詢的視圖,經過視圖避免複雜的Join,而不是直接查詢領域模型。 
從目前的趨勢來看OLAP交給NoSQL數據庫可能更合適性能

維度三:項目維護迭代維度比較(長期快速迭代類、變更較小的類型)優化

追求快速迭代,需求快速變動,靈活的 mybatis 修改起來更加方便,並且通常每一次的改動不會帶來性能上的降低。JPA常常由於添加關聯關係或者開發者不瞭解優化致使項目愈來愈糟糕(這裏可能要考研功力了)。

我的總結(請參考上面一些維度,或者還有許多其它維度,總結本身的理解)

1.表關聯較多的項目,優先使用mybatis

2.持續維護開發迭代較快的項目建議使用mybatis,由於通常這種項目須要變化很靈活,對sql的靈活修改要求較高

3.對於傳統項目或者關係模型較爲清晰穩定的項目,建議JPA(好比DDD設計中的領域層)

4.目前微服務比較火,基於其職責的獨立性,若是模型清晰,能夠考慮使用JPA,但若是數據量較大全字段返回數據量大的話可能在性能有影響,須要根據實際狀況進行分析

qq交流羣:208779755

相關文章
相關標籤/搜索