JDBC、MyBatis、Hibernate的區別?

JDBC

1.使用JDBC編程須要連接數據庫,註冊驅動和數據庫信息。java

2.操做Connection,打開Statement對象。程序員

3.經過Statement執行SQL語句,返回結果放到ResultSet對象。sql

4.使用ResultSet讀取數據。數據庫

5.關閉數據庫相關的資源。編程

JDBC缺點:緩存

工做量比較大,須要鏈接,而後處理jdbc底層事務,處理數據類型,還須要操做Connection,Statement對象和ResultSet對象去拿數據並關閉他們mybatis

沒有使用框架的時候 sql語句是和java語句一塊兒寫在dao層 耦合度高,維護不易並且實際開發中sql是會變的,須要頻繁修改 當你要替換某個sql代碼的時候,須要對整個項目 進行操做,極不方便。app

JDBC優勢:框架

接近底層,理論上效率最高性能

MyBatis

半自動化的持久層框架 半自動 輕量級 

1.SQLSessionFactoryBuilder(構造器):它會根據配置信息或者代碼生成SqlSessionFactory。

2.SqlSessionFactory(工廠接口):依靠工廠生成SqlSession。

3.SqlSession(會話):是一個既能夠發送SQL去執行而且返回結果,也能夠獲取Mapper接口。

4.SQL Mapper:是由一個JAVA接口和XML文件(或註解)構成,須要給出對應的SQL和映射規則。SQL是由Mapper發送出去,而且返回結果。

Mybatis的優勢:

1、易於上手和掌握,提供了數據庫查詢的自動對象綁定功能,並且延續了很好的SQL使用經驗,對於沒有那麼高的對象模型要求的項目來講,至關完美。

2sql寫在xml裏,便於統一管理和優化, 解除sql與程序代碼的耦合。

3、提供映射標籤,支持對象與數據庫的orm字段關係映射

4 提供對象關係映射標籤,支持對象關係組建維護

5、提供xml標籤,支持編寫動態sql

6、速度相對於Hibernate的速度較快

Mybatis的缺點:

1、關聯表多時,字段多的時候,sql工做量很大。

2sql依賴於數據庫,致使數據庫移植性差。

3、因爲xml裏標籤id必須惟一,致使DAO中方法不支持方法重載。

4、對象關係映射標籤和字段映射標籤僅僅是對映射關係的描述,具體實現仍然依賴於sql

5DAO層過於簡單,對象組裝的工做量較大。

6、不支持級聯更新、級聯刪除。

7Mybatis的日誌除了基本記錄功能外,其它功能薄弱不少。

8、編寫動態sql,不方便調試,尤爲邏輯複雜時。

9、提供的寫動態sqlxml標籤功能簡單,編寫動態sql仍然受限,且可讀性低。

Hibernate

Hibernate的優勢:

1hibernate是全自動,hibernate徹底能夠經過對象關係模型實現對數據庫的操做,擁有完整的JavaBean對象與數據庫的映射結構來自動生成sql

2、功能強大,數據庫無關性好,O/R映射能力強,須要寫的代碼不多,開發速度很快。

3、有更好的二級緩存機制,可使用第三方緩存。

4、數據庫移植性良好。

5hibernate擁有完整的日誌系統,hibernate日誌系統很是健全,涉及普遍,包括sql記錄、關係異常、優化警告、緩存提示、髒數據警告等

Hibernate的缺點:

1、學習門檻高,精通門檻更高,程序員如何設計O/R映射,在性能和對象模型之間如何取得平衡,以及怎樣用好Hibernate方面須要的經驗和能力都很強才行

2hibernatesql不少都是自動生成的,沒法直接維護sql;雖然有hql查詢,但功能仍是不及sql強大,見到報表等變態需求時,hql查詢要虛,也就是說hql查詢是有侷限的;hibernate雖然也支持原生sql查詢,但開發模式上卻與orm不一樣,須要轉換思惟,所以使用上有些不方便。總之寫sql的靈活度上hibernate不及mybatis

相關文章
相關標籤/搜索