1. 程式人生 > >Hibernate和Mybatis的工作原理以及區別

Hibernate和Mybatis的工作原理以及區別

增刪改 緩存 .get poj 高效率 ron 大型網站架構 數據訪問 最簡

一、Mybatis的工作流程圖

技術分享

(1)、原理詳見:

MyBatis應用程序根據XML配置文件創建SqlSessionFactory,SqlSessionFactory在根據配置,配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,獲取一個SqlSession。SqlSession包含了執行sql所需要的所有方法,可以通過SqlSession實例直接運行映射的sql語句,完成對數據的增刪改查和事務提交等,用完之後關閉SqlSession。

二、Mybatis的優缺點

優點:

1、簡單易學

mybatis本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個jar文件+配置幾個sql映射文件易於學習,易於使用,通過文檔和源代碼,可以比較完全的掌握它的設計思路和實現。

2、靈活

mybatis不會對應用程序或者數據庫的現有設計強加任何影響。 sql寫在xml裏,便於統一管理和優化。通過sql基本上可以實現我們不使用數據訪問框架可以實現的所有功能,或許更多。

3、解除sql與程序代碼的耦合

通過提供DAL層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。sql和代碼的分離,提高了可維護性。

4、提供映射標簽,支持對象與數據庫的orm字段關系映射


5、提供對象關系映射標簽,支持對象關系組建維護


6、提供xml標簽,支持編寫動態sql。

缺點:

1、編寫SQL語句時工作量很大,尤其是字段多、關聯表多時,更是如此。


2、SQL語句依賴於數據庫,導致數據庫移植性差,不能更換數據庫。

3、框架還是比較簡陋,功能尚有缺失,雖然簡化了數據綁定代碼,但是整個底層數據庫查詢實際還是要自己寫的,工作量也比較大,而且不太容易適應快速數據庫修改。

4、二級緩存機制不佳

三、Hibernate的工作原理流程圖

技術分享

四、Hibernate是對JDBC進一步封裝

原來沒有使用Hiberante做持久層開發時,存在很多冗余,如:各種JDBC語句,connection的管理,所以出現了Hibernate把JDBC封裝了一下,我們不用操作數據,直接操作它就行了。

五、我們再從分層的角度來看

典型的三層架構:表示層,業務層,還有持久層。Hiberante也是持久層的框架,而且持久層的框架還有很多,比如:IBatis,Nhibernate,JDO,OJB,EJB等等。

六、Hibernate是開源的一個ORM(對象關系映射)框架

ORM,即Object-Relational Mapping,它的作用就是在關系型數據庫和對象之間做了一個映射。從對象(Object)映射到關系(Relation),再從關系映射到對象。這樣,我們在操作數據庫的時候,不需要再去和復雜SQL打交道,只要像操作對象一樣操作它就可以了(把關系數據庫的字段在內存中映射成對象的屬性)。

Hibernate的核心:

  Hibernate六大核心接口,兩個主要配置文件

1、Configuration接口:負責配置並啟動Hibernate

2、SessionFactory接口:負責初始化Hibernate

3、Session接口:負責持久化對象的CRUD操作

4、Transaction接口:負責事務

5、Query接口和Criteria接口:負責執行各種數據庫查詢

註意:Configuration實例是一個啟動期間的對象,一旦SessionFactory創建完成它就被丟棄了。

Hibernate運行過程:

1.通過Configuration().configure();讀取並解析hibernate.cfg.xml配置文件

2.由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>讀取並解析映射信息

3.通過config.buildSessionFactory();//創建SessionFactory

4.sessionFactory.openSession();//打開Sesssion

5.session.beginTransaction();//創建事務Transation

6.persistent operate持久化操作 //一般指Save這個方法

7.session.getTransaction().commit();//提交事務

8.關閉Session

9.關閉SesstionFactory

Hibernate的優/缺點:

優點:

1、更加對象化

以對象化的思維操作數據庫,我們只需要操作對象就可以了,開發更加對象化。

2、移植性
因為Hibernate做了持久層的封裝,你就不知道數據庫,你寫的所有的代碼都具有可復用性。

3、Hibernate是一個沒有侵入性的框架,沒有侵入性的框架我們稱為輕量級框架。

對比Struts的Action和ActionForm,都需要繼承,離不開Struts。Hibernate不需要繼承任何類,不需要實現任何接口。這樣的對象叫POJO對象。

4、Hibernate代碼測試方便。

5、提高效率,提高生產力。

Hibernate和Mybatis的工作原理以及區別