話說對 Hibernate 的吐槽很沒道理,我竟無言以對

在 Java 的世界裏有一些超級重量級的框架,不少 Java 開發者對它們甚至比對 JDK 自己還熟悉。沒錯,我說的就是 Struts、Spring 和 Hibernate,或者就把這三者稱爲 Java 的三劍客,傳說中大名鼎鼎的 SSH。java

儘管我今年只有 19 歲,但已有十好幾年的 Java 開發經驗,目前簡歷裏只敢說熟悉(非精通) Java 編程語言。曾經是 Struts 和 Hibernate 的深度用戶。對於 Web 框架個人軌跡是:Servlet -> Struts 1.x -> No Framework ,No Framework 其實說的不許確,應該是本身對 Servlet 或者 Filter 的一個簡單封裝。而在數據庫訪問這塊軌跡是:JDBC -> Hibernate -> DbUtils。我以爲 DbUtils 說的也不許確,由於我願意嘗試各類輕量級的 ORM 框架,而 DbUtils 嚴格意義上並非一個 ORM 的東西,充其量就是一個 JDBC 的工具包。數據庫

回想下當你在寫各類 JDBC 程序的時候,假設一個表有 20 個字段,那麼一個插入記錄的方法可能就有小 30 行代碼,由於有大量的 setString\setInteger 之類的方法須要調用。後來出現了 Hibernate 後感受原來寫代碼也是如此的享受,以前 30 行的代碼如今只須要兩三行搞定!瞬間以爲腰也不酸了、腿也不疼了,一口氣能寫幾十個方法。而 Hibernate 初期階段同類產品並很少,iBatis 算是一個吧。固然後來大量 ORM 框架如雨後春筍般冒出已經是幾年之後的事了!編程

在此輸入圖片描述

我記得最開始 Iteye 也就是以前的 Javaeye 早期的網站是 hibernate.org.cn ,你們都在討論 Hibernate 的各類使用技巧。由於那個時候的 ORM 是一個很是有意思的思路,完全解決重複編寫各類 JDBC 代碼的痛楚。大量的人開始學習並使用 Hibernate ,Hibernate 自己也在快速發展。任何一款軟件和框架不可能知足使用者 100% 的需求,不少人適應它,有很多人不滿現狀去改進了,或者是使用其思路開發者各類五花八門的同類產品出來。框架

選擇多了就有了比較,而後開始吐槽,概括起來有這麼幾個槽點:編程語言

  • 過重 (的確,一個 jar 包好幾兆)
  • 封裝得太狠,不少問題難以直觀診斷

Hibernate 如今的確是愈加重了,已經儼然成爲一個相似 Spring 的產品體系,例如 Hibernate ORM、Hibernate OGM、Hibernate Search 等等。而一個 Hibernate 核心 jar 包文件竟然有 5M 這麼大!這也是爲什麼08年我開始開發 OSChina 時候選擇放棄 Hibernate 的緣由(那時候的 jar 包才兩兆多),我放棄 Hibernate 的另一個緣由是: Hibernate 框架最大的優勢 —— 支持多數據庫平臺,對 OSChina 來講沒有用處,由於 OSChina 只會跑在 MySQL 數據庫之上。工具

好了,其實我想說的是多數在吐槽 Hibernate 的人可能沒注意到 Hibernate 最大的優點是什麼,或者是他平時的開發過程當中沒有機會用到這個優點。學習

某些時候咱們在開發一個應用的時候會要求應用能夠經過簡單的配置實現對不一樣數據庫的支持,我在作 OSChina 以前有一個開源軟件 —— DLOG4J,這是一個用 Java 開發的博客軟件。它是一個軟件,它的用戶各類各樣,有些但願支持 MySQL,有些但願支持 Oracle,還有 SQL Server 的。你知道數據庫儘管都遵照一些通用的 SQL 標準,但又有不少各自產品的差別,就比如說分頁讀取記錄,每一個數據庫的 SQL 語句寫法都不一樣。若是你專門針對每一個數據庫去寫這些各類的適配,煩都煩死。網站

而 Hibernate 在一開始就已是解決了這個問題,經過其 Dialect 方言可方便實現對不一樣數據庫的支持,固然這裏有個大前提是你應用的代碼中若是用到了原生的 SQL ,那麼你須要自行保證這些 SQL 是數據庫無關的。整個 DLOG4J 項目僅有 1~2 處用了 SQL 語句,其餘 99% 都是直接利用 Hibernate 的 API 或者是 HQL 編寫。所以你想要支持什麼數據庫,改個 Hibernate 的 dialect 配置便可。.net

如是看來平臺開發 Hibernate 並不是一個好選擇,其一:平臺通常不會隨意更換數據庫;其二:Hibernate 的確過重了;其三:有太多 ORM 框架能夠選擇(更多 ORM 框架請看這裏)。而產品開發則是 Hibernate 的用武之地,畢竟客戶的需求五花八門,數據庫也五花八門,想省事就 Hibernate 吧。hibernate

最後我想說的是:任何一個軟件都不可能知足你 100% 的需求。就好像你不能吐槽劉翔唱歌跑調,吐槽張學友跑得沒你快,吐槽 @紅薯 長得比你帥,是同樣的道理。

相關文章
相關標籤/搜索