簡(jiǎn)介
MyBatis 是支持普通 SQL查詢,[存儲(chǔ)過(guò)程]和高級(jí)映射的優(yōu)秀[持久層]框架。MyBatis 消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及[結(jié)果集]的檢索。MyBatis 使用簡(jiǎn)單的 XML或注解用于配置和原始映射,將接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。
每個(gè)MyBatis應(yīng)用程序主要都是使用Sql[Session]Factory實(shí)例的,一個(gè)SqlSessionFactory實(shí)例可以通過(guò)SqlSessionFactoryBuilder獲得。SqlSessionFactoryBuilder可以從一個(gè)xml配置文件或者一個(gè)預(yù)定義的配置類(lèi)的實(shí)例獲得。
用xml文件構(gòu)建SqlSessionFactory實(shí)例是非常簡(jiǎn)單的事情。推薦在這個(gè)配置中使用類(lèi)路徑資源(classpath resource),但你可以使用任何Reader實(shí)例,包括用文件路徑或file://開(kāi)頭的url創(chuàng)建的實(shí)例。MyBatis有一個(gè)實(shí)用類(lèi)----Resources,它有很多方法,可以方便地從類(lèi)路徑及其它位置加載資源。
特點(diǎn)
簡(jiǎn)單易學(xué):本身就很小且簡(jiǎn)單。沒(méi)有任何第三方依賴,最簡(jiǎn)單安裝只要兩個(gè)jar文件+配置幾個(gè)sql映射文件易于學(xué)習(xí),易于使用,通過(guò)文檔和源代碼,可以比較完全的掌握它的設(shè)計(jì)思路和實(shí)現(xiàn)。
靈活:mybatis不會(huì)對(duì)應(yīng)用程序或者數(shù)據(jù)庫(kù)的現(xiàn)有設(shè)計(jì)強(qiáng)加任何影響。 sql寫(xiě)在xml里,便于統(tǒng)一管理和優(yōu)化。通過(guò)sql語(yǔ)句可以滿足操作數(shù)據(jù)庫(kù)的所有需求。
解除sql與程序代碼的耦合:通過(guò)提供DAO層,將業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)邏輯分離,使系統(tǒng)的設(shè)計(jì)更清晰,更易維護(hù),更易單元測(cè)試。sql和代碼的分離,提高了可維護(hù)性。
提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的orm字段關(guān)系映射
提供對(duì)象關(guān)系映射標(biāo)簽,支持對(duì)象關(guān)系組建維護(hù)
提供xml標(biāo)簽,支持編寫(xiě)動(dòng)態(tài)sql。
框架架構(gòu)
我們把Mybatis的功能架構(gòu)分為三層:
(1)API接口層:提供給外部使用的接口API,開(kāi)發(fā)人員通過(guò)這些本地API來(lái)操縱數(shù)據(jù)庫(kù)。接口層一接收到調(diào)用請(qǐng)求就會(huì)調(diào)用數(shù)據(jù)處理層來(lái)完成具體的數(shù)據(jù)處理。
(2)數(shù)據(jù)處理層:負(fù)責(zé)具體的SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。它主要的目的是根據(jù)調(diào)用的請(qǐng)求完成一次數(shù)據(jù)庫(kù)操作。
(3)基礎(chǔ)支撐層:負(fù)責(zé)最基礎(chǔ)的功能支撐,包括連接管理、事務(wù)管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來(lái)作為最基礎(chǔ)的組件。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐。
動(dòng)態(tài)SQL
MyBatis 最強(qiáng)大的特性之一就是它的動(dòng)態(tài)語(yǔ)句功能。如果您以前有使用JDBC或者類(lèi)似框架的經(jīng)歷,您就會(huì)明白把SQL語(yǔ)句條件連接在一起是多么的痛苦,要確保不能忘記空格或者不要在columns列后面省略一個(gè)逗號(hào)等。動(dòng)態(tài)語(yǔ)句能夠完全解決掉這些痛苦。
盡管與動(dòng)態(tài)SQL一起工作不是在開(kāi)一個(gè)party,但是MyBatis確實(shí)能通過(guò)在任何映射SQL語(yǔ)句中使用強(qiáng)大的動(dòng)態(tài)SQL來(lái)改進(jìn)這些狀況。動(dòng)態(tài)SQL元素對(duì)于任何使用過(guò)JSTL或者類(lèi)似于XML之類(lèi)的文本處理器的人來(lái)說(shuō),都是非常熟悉的。在上一版本中,需要了解和學(xué)習(xí)非常多的元素,但在MyBatis 3 中有了許多的改進(jìn),現(xiàn)在只剩下差不多二分之一的元素。MyBatis使用了基于強(qiáng)大的OGNL表達(dá)式來(lái)消除了大部分元素。
Mtbatis集成
單獨(dú)使用mybatis是有很多限制的(比如無(wú)法實(shí)現(xiàn)跨越多個(gè)session的事務(wù)),而且很多業(yè)務(wù)系統(tǒng)本來(lái)就是使用spring來(lái)管理的事務(wù),因此mybatis最好與spring集成起來(lái)使用。
Mydbtis優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
與傳統(tǒng)的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)相比,ORM有以下優(yōu)點(diǎn):
基于SQL語(yǔ)句編程,相當(dāng)靈活,不會(huì)對(duì)應(yīng)用程序或者數(shù)據(jù)庫(kù)的現(xiàn)有設(shè)計(jì)造成任何影響,SQL寫(xiě)在XML里,解除sql與程序代碼的耦合,便于統(tǒng)一管理;提供XML標(biāo)簽,支持編寫(xiě)動(dòng)態(tài)SQL語(yǔ)句,并可重用
與JDBC相比,減少了50%以上的代碼量,消除了JDBC大量冗余的代碼,不需要手動(dòng)開(kāi)關(guān)連接
很好的與各種數(shù)據(jù)庫(kù)兼容(因?yàn)镸yBatis使用JDBC來(lái)連接數(shù)據(jù)庫(kù),所以只要JDBC支持的數(shù)據(jù)庫(kù)MyBatis都支持)
提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的ORM字段關(guān)系映射;提供對(duì)象關(guān)系映射標(biāo)簽,支持對(duì)象關(guān)系組件維護(hù)
能夠與Spring很好的集成
缺點(diǎn)
SQL語(yǔ)句的編寫(xiě)工作量較大,尤其當(dāng)字段多、關(guān)聯(lián)表多時(shí),對(duì)開(kāi)發(fā)人員編寫(xiě)SQL語(yǔ)句的功底有一定要求
SQL語(yǔ)句依賴于數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)庫(kù)移植性差,不能隨意更換數(shù)據(jù)庫(kù)
MyBatis框架適用場(chǎng)景
MyBatis專注于SQL本身,是一個(gè)足夠靈活的DAO層解決方案。
對(duì)性能的要求很高,或者需求變化較多的項(xiàng)目,如互聯(lián)網(wǎng)項(xiàng)目,MyBatis將是不錯(cuò)的選擇。
