MyBatis和Hibernate的優缺點對比。
Hibernate的優點:
1、hibernate是全自動,hibernate完全可以通過物件關係模型實現對資料庫的操作,擁有完整的JavaBean物件與資料庫的對映結構來自動生成sql。
2、功能強大,資料庫無關性好,O/R對映能力強,需要寫的程式碼很少,開發速度很快。
3、有更好的二級快取機制,可以使用第三方快取。
4、資料庫移植性良好。
5、hibernate擁有完整的日誌系統,hibernate日誌系統非常健全,涉及廣泛,包括sql記錄、關係異常、優化警告、快取提示、髒資料警告等
Hibernate的缺點:
1、學習門檻高,精通門檻更高,程式設計師如何設計O/R對映,在效能和物件模型之間如何取得平衡,以及怎樣用好Hibernate方面需要的經驗和能力都很強才行
2、hibernate的sql很多都是自動生成的,無法直接維護sql;雖然有hql查詢,但功能還是不及sql強大,見到報表等變態需求時,hql查詢要虛,也就是說hql查詢是有侷限的;hibernate雖然也支援原生sql查詢,但開發模式上卻與orm不同,需要轉換思維,因此使用上有些不方便。總之寫sql的靈活度上hibernate不及mybatis。
Mybatis的優點:
1、易於上手和掌握,提供了資料庫查詢的自動物件繫結功能,而且延續了很好的SQL使用經驗,對於沒有那麼高的物件模型要求的專案來說,相當完美。
2、sql寫在xml裡,便於統一管理和優化, 解除sql與程式程式碼的耦合。
3、提供對映標籤,支援物件與資料庫的orm欄位關係對映
4、 提供物件關係對映標籤,支援物件關係組建維護
5、提供xml標籤,支援編寫動態sql。
6、速度相對於Hibernate的速度較快
Mybatis的缺點:
1、關聯表多時,欄位多的時候,sql工作量很大。
2、sql依賴於資料庫,導致資料庫移植性差。
3、由於xml裡標籤id必須唯一,導致DAO中方法不支援方法過載。
4、物件關係對映標籤和欄位對映標籤僅僅是對對映關係的描述,具體實現仍然依賴於sql。
5、DAO層過於簡單,物件組裝的工作量較大。
6、不支援級聯更新、級聯刪除。
7、Mybatis的日誌除了基本記錄功能外,其它功能薄弱很多。
8、編寫動態sql時,不方便除錯,尤其邏輯複雜時。
9、提供的寫動態sql的xml標籤功能簡單,編寫動態sql仍然受限,且可讀性低。