更新時間:2020-05-04 來源:黑馬程序員 瀏覽量:
MyBatis(前身是iBatis)是一個支持普通SQL查詢、存儲過程以及高級映射的持久層框架,它消除了幾乎所有的JDBC代碼和參數(shù)的手動設(shè)置以及對結(jié)果集的檢索,并使用簡單的XML或注解進(jìn)行配置和原始映射,用以將接口和Java的POJO(Plain Old Java Object,普通Java對象)映射成數(shù)據(jù)庫中的記錄,使得Java開發(fā)人員可以使用面向?qū)ο蟮木幊趟枷雭聿僮鲾?shù)據(jù)庫。
MyBatis 框架也被稱之為 ORM(Object/Relational Mapping,即對象關(guān)系映射)框架。所謂的 ORM 就是一種為了解決面向?qū)ο笈c關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)類型不匹配的技術(shù),它通過描述Java對象與數(shù)據(jù)庫表之間的映射關(guān)系,自動將Java應(yīng)用程序中的對象持久化到關(guān)系型數(shù)據(jù)庫的表中。ORM框架的工作原理如下圖所示。
從上圖可以看出,使用ORM框架后,應(yīng)用程序不再直接訪問底層數(shù)據(jù)庫,而是以面向?qū)ο蟮姆绞絹聿僮鞒志没瘜ο螅≒ersisent Object,PO),而ORM框架則會通過映射關(guān)系將這些面向?qū)ο蟮牟僮鬓D(zhuǎn)換成底層的SQL操作。
當(dāng)前的ORM框架產(chǎn)品有很多,常見的ORM框架有Hibernate和MyBatis。這兩個框架的主要區(qū)別如下。
·Hibernate:是一個全表映射的框架。通常開發(fā)者只需定義好持久化對象到數(shù)據(jù)庫表的映射關(guān)系,就可以通過 Hibernate 提供的方法完成持久層操作。開發(fā)者并不需要熟練地掌握 SQL語句的編寫,Hibernate會根據(jù)制定的存儲邏輯,自動的生成對應(yīng)的SQL,并調(diào)用JDBC接口來執(zhí)行,所以其開發(fā)效率會高于MyBatis。然而Hibernate自身也存在著一些缺點,例如它在多表關(guān)聯(lián)時,對 SQL 查詢的支持較差;更新數(shù)據(jù)時,需要發(fā)送所有字段;不支持存儲過程;不能通過優(yōu)化 SQL 來優(yōu)化性能等。這些問題導(dǎo)致其只適合在場景不太復(fù)雜且對性能要求不高的項目中使用。
·MyBatis:是一個半自動映射的框架。這里所謂的“半自動”是相對于Hibernate全表映射而言的,MyBatis 需要手動匹配提供 POJO、SQL和映射關(guān)系,而Hibernate只需提供POJO 和映射關(guān)系即可。與Hibernate相比,雖然使用MyBatis手動編寫 SQL 要比使用Hibernate的工作量大,但MyBatis可以配置動態(tài)SQL并優(yōu)化SQL,可以通過配置決定SQL的映射規(guī)則,它還支持存儲過程等。對于一些復(fù)雜的和需要優(yōu)化性能的項目來說,顯然使用MyBatis更加合適。推薦了解黑馬程序員java中級程序員課程。
猜你喜歡:
微服務(wù)架構(gòu)的技術(shù)選型你知道怎么選嗎?