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