MyBatis架構(gòu)的優(yōu)點(diǎn)及缺點(diǎn)
Mybatis簡(jiǎn)介
MyBatis是一款優(yōu)秀的持久層框架,它支持定制化SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。
1、Mybatis是一個(gè)半ORM(對(duì)象關(guān)系映射)框架,底層封裝了JDBC,是程序員在開(kāi)發(fā)時(shí)只需要關(guān)注SQL語(yǔ)句本身,不需要花費(fèi)精力去處理加載驅(qū)動(dòng)、創(chuàng)建連接、創(chuàng)建statement等繁雜的過(guò)程。使得程序員可以花更多的精力放到業(yè)務(wù)開(kāi)發(fā)中。另外,程序員直接編寫(xiě)原生態(tài)sql,嚴(yán)格控制sql執(zhí)行性能,靈活度高。
2、MyBatis可以使用簡(jiǎn)單的XML文件或注解方式來(lái)配置和映射原生信息,將POJO映射成數(shù)據(jù)庫(kù)中的記錄,避免了幾乎所有的JDBC代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。
3、通過(guò)xml文件或注解的方式將要執(zhí)行的各種statement配置起來(lái),并通過(guò)java對(duì)象和statement中sql的動(dòng)態(tài)參數(shù)進(jìn)行映射生成最終執(zhí)行的sql語(yǔ)句,最后由mybatis框架執(zhí)行sql并將結(jié)果映射為java對(duì)象并返回。(從執(zhí)行sql到返回result的過(guò)程)。
?

Mybaits的優(yōu)點(diǎn)
1、SQL語(yǔ)句和代碼分離
便于統(tǒng)一管理和維護(hù),不必再Java代碼中調(diào)式SQL語(yǔ)句。但是當(dāng)SQL語(yǔ)句出錯(cuò)時(shí),控制臺(tái)不會(huì)打印Log,解決辦法--引用log4j
2、用標(biāo)簽拼接SQL語(yǔ)句
用標(biāo)簽代替JAVA代碼雖然寫(xiě)簡(jiǎn)單SQL語(yǔ)句時(shí)方便了許多,但是復(fù)雜的語(yǔ)句拼接難度大。
3、結(jié)果集和JAVA對(duì)象自動(dòng)映射
寫(xiě)過(guò)hibernate的都知道,hibernate連接數(shù)據(jù)庫(kù)生成SQL語(yǔ)句的時(shí)候,會(huì)自動(dòng)生成數(shù)據(jù)庫(kù)實(shí)體類(lèi)和其映射文件,在mybaits中,它幫我們做了這件事情。但是對(duì)數(shù)據(jù)庫(kù)的字段要求較高,實(shí)體類(lèi)和配置文件需要手寫(xiě)。
4、即時(shí)加載
在一個(gè)頁(yè)面同時(shí)顯示大量數(shù)據(jù)時(shí),hibernate的延時(shí)加載會(huì)創(chuàng)建大量的代理類(lèi),消耗資源.mybaits并不通過(guò)延時(shí)訪問(wèn)數(shù)據(jù)庫(kù)。
MyBatis框架的缺點(diǎn)
1、SQL語(yǔ)句的編寫(xiě)工作量較大,尤其當(dāng)字段多、關(guān)聯(lián)表多時(shí),對(duì)開(kāi)發(fā)人員編寫(xiě)SQL語(yǔ)句的功底有一定要求。
2、SQL語(yǔ)句依賴于數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)庫(kù)移植性差,不能隨意更換數(shù)據(jù)庫(kù)。
MyBatis框架適用場(chǎng)合
1、MyBatis專(zhuān)注于SQL本身,是一個(gè)足夠靈活的DAO層解決方案。
2、對(duì)性能的要求很高,或者需求變化較多的項(xiàng)目,如互聯(lián)網(wǎng)項(xiàng)目,MyBatis將是不錯(cuò)的選擇。
MyBatis與Hibernate的比較
1、兩者最大的區(qū)別:
針對(duì)簡(jiǎn)單邏輯,Hibernate和MyBatis都有相應(yīng)的代碼生成工具,可以生成簡(jiǎn)單基本的DAO層方法。
針對(duì)高級(jí)查詢,Mybatis需要手動(dòng)編寫(xiě)SQL語(yǔ)句,以及ResultMap。而Hibernate有良好的映射機(jī)制,開(kāi)發(fā)者無(wú)需關(guān)心SQL的生成與結(jié)果映射,可以更專(zhuān)注于業(yè)務(wù)流程。
2、開(kāi)發(fā)難度對(duì)比
Hibernate的開(kāi)發(fā)難度要大于Mybatis。主要由于Hibernate比較復(fù)雜、龐大,學(xué)習(xí)周期較長(zhǎng)。
而Mybatis則相對(duì)簡(jiǎn)單一些,并且Mybatis主要依賴于sql的書(shū)寫(xiě),讓開(kāi)發(fā)者感覺(jué)更熟悉。
3、sql書(shū)寫(xiě)比較
Mybatis的SQL是手動(dòng)編寫(xiě)的,所以可以按需求指定查詢的字段。不過(guò)沒(méi)有自己的日志統(tǒng)計(jì),所以要借助log4j來(lái)記錄日志。
Hibernate也可以自己寫(xiě)SQL來(lái)指定需要查詢的字段,但這樣就破壞了Hibernate開(kāi)發(fā)的簡(jiǎn)潔性。不過(guò)Hibernate具有自己的日志統(tǒng)計(jì)。
4、數(shù)據(jù)庫(kù)擴(kuò)展性比較
Mybatis由于所有SQL都是依賴數(shù)據(jù)庫(kù)書(shū)寫(xiě)的,所以擴(kuò)展性,遷移性比較差。
Hibernate與數(shù)據(jù)庫(kù)具體的關(guān)聯(lián)都在XML中,所以HQL對(duì)具體是用什么數(shù)據(jù)庫(kù)并不是很關(guān)心。
5、緩存機(jī)制比較
相同點(diǎn):Hibernate和Mybatis的二級(jí)緩存除了采用系統(tǒng)默認(rèn)的緩存機(jī)制外,都可以通過(guò)實(shí)現(xiàn)你自己的緩存或?yàn)槠渌谌骄彺娣桨?,?chuàng)建適配器來(lái)完全覆蓋緩存行為。
中培IT學(xué)院企業(yè)級(jí)JAVA高級(jí)開(kāi)發(fā)技術(shù)實(shí)戰(zhàn)培訓(xùn)班,將于9月23日在三亞開(kāi)班,資深專(zhuān)家詳細(xì)講解MyBatis架構(gòu)原理及使用,課程結(jié)束由中國(guó)信息化培訓(xùn)中心頒發(fā)《JAVA高級(jí)開(kāi)發(fā)工程師》證書(shū),證書(shū)可作為專(zhuān)業(yè)技術(shù)人員職業(yè)能力考核的證明,以及專(zhuān)業(yè)技術(shù)人員崗位聘用、任職、定級(jí)和晉升職務(wù)的重要依據(jù)。如有對(duì)JAVA開(kāi)發(fā)感興趣的小伙伴快快私信我們吧!