最初SUN公司推出了JavaEE服務器端組件模型(EJB),但是由於EJB配置復雜,且適用范圍較小,於是很快就被淘汰了。與EJB的失敗伴隨而來的是另外一個框架的應運而生。他就是至今也比較流行的Hibernate。
Hibernate(適用於場景不太復雜,要求性能不苛刻)
Hibernate是建立在POJO和數據庫模型的直接映射關系上的。
Hibernate是建立在若干POJO通過XML映射文件(或注解)提供的規則映射到數據庫表上。換句話說,我們可以通過POJO直接操作數據庫的數據。它提供的是一種全表映射的模型。相對而言,Hibernate對JDBC的封裝程度還是比較高的,我們已經不需要編寫SQL語言,只要適用HQL語言就可以了。
Hibernate的XML文件描述的是POJO和數據庫表的映射關系。Hibernate通過配置文件(或注解)就可以把數據庫的數據直接映射到POJO上,我們可以通過操作POJP做操作數據庫記錄。對於不擅長SQL的程序員來說,這是莫大的驚喜,因為通過Hibernate你幾乎不需要編寫SQL就能操作數據庫的記錄。
其通過建立Hibernate的工廠對象(SessionFactory),用它來做全局對象,產生Session接口,就可以操作數據庫了。
Hibernate的優勢主要是:
(1)在配置了映射文件和數據庫連接文件后,Hibernate就可以通過Session操作,非常容易,消除了JDBC帶來的大量代碼;
(2)同時還提供了級聯、緩存、映射、一對多等功能。
缺陷:
(1)全表映射帶來的不便,比如更新時需要發送所有的字段。
(2)無法根據不同的條件組裝不同的SQL。
(3)對多表關聯和復雜SQL查詢支持較差,需要自己寫SQL,返回后,需要自己將數據組裝成POJO。
(4)不能有效支持存儲過程。
(5)雖然有HQL,但性能較差。大型互聯網系統往往需要優化SQL,而Hibernate做不到。
在當今大型互聯網中,靈活、SQL優化,減少數據的傳遞時最基本的優化方法,顯然Hibernate無法滿足我們的要求,於是,MyBatis框架誕生了。
MyBatis(靈活的、可以動態生成映射關系的框架)
MyBatis是一個半自動映射的框架,它需要手工匹配提供POJO,SQL和映射關系,而全表映射的Hibernate只需要提供POJO和映射關系便可。
MyBatis所需要提供的映射文件包含三個部分:
(1)SQL
(2)映射關系
(3)POJO
MyBatis需要自己編寫SQL,但是支持配置動態SQL,MyBatis幾乎能做到JDBC所能做到的所有事情。MyBatis具有自動映射功能。換句話說,在注意一些規則的基礎上,MyBatis可以給我們完成自動映射,而無需再寫任何的映射規則。
缺點:
配置工作量大。