Mybatis是一個(gè)映射的封裝嗤朴,他將代碼塊中的sql存在統(tǒng)一的xml文件也就是SqlMapper中球及。同時(shí)他將你執(zhí)行的sql傳參進(jìn)行也就是執(zhí)行變量進(jìn)行了通配垫卤,然后映射到model中。
mybatis中的大致執(zhí)行過程:通過factory方法獲取sqlSession,通過MapperProxy代理到dao--執(zhí)行底層數(shù)據(jù)庫操作迷守,===“據(jù)經(jīng)過controller 再經(jīng)過service 然后執(zhí)行service中的相關(guān)方法并關(guān)聯(lián)到mapper 再執(zhí)行mapper.xml中的sql語句"
以下是JDBC和Mybatis的區(qū)別
JDBC:
(1) 加載JDBC驅(qū)動(dòng)板丽,建立并獲取數(shù)據(jù)庫連接,創(chuàng)建statement對(duì)象
(2) 設(shè)置SQL語句的傳入?yún)?shù)
(3) 執(zhí)行SQL語句并獲取查詢結(jié)果
(4) 對(duì)查詢結(jié)果進(jìn)行轉(zhuǎn)換處理并將處理結(jié)果返回
(5) 釋放資源
Mybatis:
(1) 連接池适袜,dataSource,在驅(qū)動(dòng)并連接的這個(gè)過程中優(yōu)化并解耦
JDBC第一步其實(shí)從效率角度來看是不合適的舷夺,因?yàn)闊o論什么數(shù)據(jù)庫都不可能支撐隨機(jī)和龐大的連接數(shù)苦酱,而且必不可免存在連接浪費(fèi)的情況,Mybatis封裝了這些優(yōu)化的方法
(2)統(tǒng)一sql存取到XML
如果代碼寫在java塊中给猾,在團(tuán)隊(duì)中很可能出現(xiàn)兩個(gè)交叉的業(yè)務(wù)代碼使用類似的sql疫萤,而開發(fā)人員本身沒有交集,那么就會(huì)出現(xiàn)重復(fù)無用的SQL敢伸,而對(duì)SQL的修改代表對(duì)java文件的修改扯饶,需要重新編譯和打包部署。
Mybatis將sql統(tǒng)一存取到xml中池颈,就算業(yè)務(wù)交叉尾序,由于統(tǒng)一配置的緣故,sql在xml中一目了然躯砰,兩個(gè)跨組的程序員可以看到對(duì)方的sql每币,來判斷自己是否需要重用,使用xml可以減少代碼配置琢歇。
此外在java代碼中拼寫長SQL太惡心了
(3) 參數(shù)和結(jié)果集映射
sql的方式傳入需要的參數(shù)兰怠,如果存在多條件“或類型”的查詢梦鉴,那么就代表你必須傳參進(jìn)行SQL拼接,就算使用xml的方式的方式也不行揭保。要么每個(gè)業(yè)務(wù)獨(dú)立配置xml中的sql肥橙,要么還是寫入java代碼中,或者以工具方式進(jìn)行自動(dòng)拼接
Mybatis使用映射的方式秸侣,方便model管理參數(shù)快骗,同時(shí)以解析器的方式將參數(shù)動(dòng)態(tài)憑借到sql,由于是model映射塔次,查詢結(jié)果可以統(tǒng)一映射方篮,而且mybatis對(duì)查詢結(jié)果集對(duì)了緩存處理,使得重復(fù)查詢進(jìn)行了進(jìn)一步優(yōu)化
(4)對(duì)多重復(fù)sql進(jìn)行復(fù)用封裝
比如模板方法励负,將常用sql模塊化藕溅,直接調(diào)用。比如通用的save和getID之類的继榆,只有表名和字段名有變化