談談Spring data Jpa 和 Mybatis 兩者的區別

​​​​​首先,Spring Data JPA可以理解爲 JPA 規範的再次封裝抽象,底層還是使用了 Hibernate 的 JPA 技術實現。

   JPA默認使用hibernate作爲ORM實現,所以,一般使用Spring Data JPA即會使用hibernate。Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,它將POJO與數據庫表建立映射關係,是一個全自動的orm框架,hibernate可以自動生成SQL語句,自動執行,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。

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

所以,這裏說 jap和mybatis的區別也就是 hibernate和mybatis的區別了。

    Mybatis學習門檻低,簡單易學,程序員直接編寫原生態sql,可嚴格控制sql執行性能,靈活度高,非常適合對關係數據模型要求不高的軟件開發,例如互聯網軟件、企業運營類軟件等,因爲這類軟件需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的前提是mybatis無法做到數據庫無關性,如果需要實現支持多種數據庫的軟件則需要自定義多套sql映射文件,工作量大。

   Hibernate對象/關係映射能力強,數據庫無關性好,對於關係模型要求高的軟件(例如需求固定的定製化軟件)如果用hibernate開發可以節省很多代碼,提高效率。但是Hibernate的學習門檻高,要精通門檻更高,而且怎麼設計O/R映射,在性能和對象模型之間如何權衡,以及怎樣用好Hibernate需要具有很強的經驗和能力纔行。

總結來說:

   Mybatis可以進行更細緻的SQL優化,查詢必要的字段,但是需要維護SQL和查詢結果集的映射。數據庫的移植性較差,針對不同的數據庫編寫不同的SQL。

   Hibernate對數據庫提供了較爲完整的封裝,封裝了基本的DAO層操作,有較好的數據庫移植性。但是學習週期長,開發難度大於Mybatis。

對於hibernate和mybatis而言,兩者都是orm框架,就一定會有對比。兩方,網上都是各抒己見

比如:

   從框架的設計理念上來看,hibernate是一種面向對象,全自動的orm框架,hibernate 是我們不用關注數據庫,而需要去關注代碼本身,通過操作映射表的實體對象,一定程度上簡化了開發,提高了開發效率,而mybatis 是一種半自動的orm框架,使用時需要自己寫sql語句,在我看來,項目中太多的sql語句,反而不如直接的實體對象操作更清晰明瞭

     從表關聯上看,有人說hibernate的多表關聯是一大弊病,hibernate 本身並沒有提供實體類多表關聯的方法,而如果通過mangtoOne之類的實體類設計又會產生效率問題,但其實現在已經有了很好的解決方案,通過整合queryDSL就可以很方便地對錶對象進行關聯查詢,這樣其實mybatis 的靈活sql優勢其實也沒有那麼的明顯

     從表,表字段映射上看,hibernate 直接通過框架生成表,表字段,能夠更方便地對數據庫的表進行維護,而mybatis 建表更新表都需要寫sql語句,又需要花費精力去維護這樣的sql語句,sql語句查詢出來的數據又要通過resultMap 進行映射,沒有hibernate方便

     從性能上看,如果只是內部系統,用戶量較小的系統,兩個框架其實性能上差距不會太明顯,這個時候推薦使用springdatajpa 開發效率反而會更高

   總之,按照用戶的需求在有限的資源環境下只要能做出維護性、擴展性良好的軟件架構都是好架構,所以框架只有適合纔是最好。其次就是領導的決策和team的溝通!

參考:https://www.jianshu.com/p/22f75d68deca

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章