Spring Data JPA 和MyBatis比較

如今Dao持久層的解決方案中,大部分是採用Spring Data JPA或MyBatis解決方案,而且傳統企業多用前者,互聯網企業多用後者。java

Spring Data JPA 是Spring Data 在JPA(Java持久層規範)和ORM(對象關係映射)框架之間抽象封裝層,它不直接代替ORM框架,默認低層使用的ORM框架是Hibernate,但使用它能夠靈活的在各類ORM框架之間切換,而且減小ORM框架接入部分重複代碼,進而簡化代碼。sql

MyBatis是一個持久層框架的,但它設計初衷與Hibernate等全自動、符合JPA規範的ORM框架不一樣,重點關注關係到對象的(R——》O),然後者不只是關係到對象的映射,還有對象到關係的映射(O——》R),設計上但願經過面向對象的方式寫SQL,能夠更好的屏蔽不一樣數據庫之間的差別,抽象程度更高。而前者MyBatis須要本身手動寫SQL,更靈活,但受限於開發編寫SQL代碼水平,可能會出現不兼容不一樣數據庫SQL的狀況。數據庫

網上也有觀點認爲ORM是一種反模式,認爲從關係數據庫到面向對象不徹底是一一對應的,強行的要ORM反而會讓一些設計變得很奇怪。安全

總的來講,Spring Data JPA和MyBatis都是很不錯且被普遍使用的持久層解決方案,具體用那個能夠看團隊成員對技術棧熟悉程度以及項目是否對數據持久層方面有特殊需求。相對來講Spring Data JPA/Hibernate用好的話會簡單些,不過複雜查詢及結果集的返回沒有直接用MyBatis靈活方便,可參考以下解決方案:mybatis

做者:beamofsoul
連接:https://www.zhihu.com/question/53706909/answer/200878397

使用Spring Data JPA + QueryDSL + Hibernate。 基本的增刪改查和調用存儲過程經過Spring Data JPA Repository來解決 稍微複雜的查詢或是批量操做使用QueryDSL或Spring Data Specification的API來解決 特別特別複雜的查詢操做可使用Spring Data JPA Repository的註解定義native sql來解決 全部持久層底層操做都由Hibernate來支持,且爲了保證效率和性能,不須要的包/特性就不須要引入,基本上使用core包就可以解決問題,固然若是有須要能夠加上orm 全過程脫離任何格式(.java除外)的配置文件,都使用Java Config的方式進行配置,除了須要抽象出一套本身架構的持久層的API之外,只須要提供一個獨立的空內容.java配置文件(若是不須要多數據源配置的話),在類上面配置RepositoryFactoryBean和Repository接口包路徑架構

全使用過程當中,除了native sql處之外,所有持久層操做都是類型安全的,特別是使用QueryDSL或Specification後... 今後,mybatis根本就沒有存在的必要...框架

相關文章
相關標籤/搜索