Spring Boot 2.0 讀書筆記_08:數據庫操作補充說明 + Mybatis、Hibernate異同點

寫在開頭,爲了承接下篇文章JPA做好鋪墊以及回顧下數據庫操作的相關知識,於是有了這篇文章。
談到操作數據庫,可以說我是經歷了好幾個階段:提及幾個階段關鍵字來回憶下!

1. JDBC階段(數據庫驅動,preparedStatement,close()放在try-catch塊裏)
2. 連接池階段(c3p0、dbcp、druid)
3. Spring JDBC Template階段
4. 框架階段(mybatis、mybatis-plus、hibernate)

總的來說,原理性的JDBC是貫穿始終的,只是在不同角度和程度上進行數據庫相關操作的封裝。當然封裝角度和程度也大有不同。

封裝角度,這個詞形容可能有點牽強,但是數據庫操作的封裝便是沿着這個方向進行的。

SQL角度:Mybatis
Java Entity角度:Hibernate

那麼接下來就是老生常談的面試環節:Mybatis和Hibernate的區別?
通過網上資料在這裏總結下: 提前說明,博主沒怎麼使用過Hibernate

  1. 上手速度

就開發速度而言,Hibernate要比Mybatis上手難度大。換言之Mybatis對新手比較友好。當然實際使用中要結合具體需求進行使用,比如:一個項目中複雜查詢幾乎沒有,都是常規的CURD操作,這種場景下就比較適合使用Hibernate了,基於數據庫的ORM框架已經幫你將基本的SQL語句進行了封裝,無需再去寫SQL語句。反之,開發的是一個複雜查詢操作較多的需求項目,這個時候Hibernate的短板就出現了,這個時候採用Mybatis便會加快開發速度,你可以自定義SQL,進行高效的複雜查詢操作。

  1. 開發工作量

Hibernate和MyBatis都有相應的代碼生成工具。可以生成簡單基本的DAO層方法。針對高級查詢,Mybatis需要手動編寫SQL語句,以及ResultMap。而Hibernate有良好的映射機制,開發者無需關心SQL的生成與結果映射,可以更專注於業務流程。

  1. SQL優化

Hibernate的查詢會將表中的所有字段查詢出來,這一點會有性能消耗。Hibernate也可以自己寫SQL來指定需要查詢的字段,但這樣就破壞了Hibernate開發的簡潔性。而Mybatis的SQL是手動編寫的,所以可以按需求指定查詢的字段。

  1. 對象管理

Hibernate 是完整的對象/關係映射解決方案,它提供了對象狀態管理(state management)的功能,使開發者不再需要理會底層數據庫系統的細節。也就是說,相對於常見的 JDBC/SQL 持久層方案中需要管理 SQL 語句,Hibernate採用了更自然的面向對象的視角來持久化 Java 應用中的數據。


敲黑板記筆記:這個地方要着重說一下ORM(對象關係映射)框架,Hibernate自然不必多說,O/R映射能力強,但是Mybatis也被稱作ORM框架?這是爲何?

關鍵字:Hibernate POJO DBTable
Hibernate對數據庫結構提供了較爲完整的封裝,Hibernate的O/R Mapping實現了POJO和數據庫表之間的映射,以及SQL的自動生成和執行。程序員往往只需定義好了POJO到數據庫表的映射關係,即可通過Hibernate提供的方法完成持久層操作。程序員甚至不需要對SQL的熟練掌握,Hibernate/OJB會根據制定的存儲邏輯,自動生成對應的SQL並調用JDBC接口加以執行。

關鍵字:Mybatis POJO SQL
Mybatis的着力點,則在於POJO與SQL之間的映射關係。也就是說,Mybatis並不會爲程序員在運行期自動生成SQL執行。具體的SQL需要程序員編寫,然後通過映射配置文件,將SQL所需的參數,以及返回的結果字段映射到指定POJO。使用Mybatis提供的ORM機制,對業務邏輯實現人員而言,面對的是純粹的Java對象,這一層與通過Hibernate 實現ORM而言基本一致,而對於具體的數據操作,Hibernate會自動生成SQL語句,而Mybatis則要求開發者編寫具體的SQL語句。相對Hibernate而言,Mybatis以SQL開發的工作量和數據庫移植性上的讓步,爲系統設計提供了更大的自由空間。

一句話總結:Hibernate是POJO與數據庫表的完整映射對應,Mybatis是對SQL返回ResultSet集的POJO映射。

角度不同,自然適用的場景便不同。無論如何,在數據框操作的上層,我們都希望操作的最小單元是Object,這樣便於業務邏輯的開發,以及對象的管理。

Mybatis作者曾說過:

If you are starting a new project and you’re in full control of your object model and database design, Hibernate is a good choice of O/R tool.
If you are accessing any 3rd party databases (e.g. vendor supplied), or you’re working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That’s were an SQL Mapper comes in handy.

如果你開始一個新的項目,你完全控制你的對象模型和數據庫設計,Hibernate O/R工具是一個不錯的選擇。
如果你訪問任何第三方的數據庫(如供應商提供的),或者你有一個傳統的數據庫工作,甚至只是一個很糟糕的數據庫設計,然後O/R映射器可能無法處理的情況。這是一個SQL映射器就派上用場了。


兩者都很優秀,用什麼看自己了。此外,Mybatis-plus也是一個非常不錯的選擇哦。

MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,爲簡化開發、提高效率而生。

在這裏插入圖片描述

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