Mybatis是一個映射的封裝,他將代碼塊中的sql存在統(tǒng)一的xml文件也就是SqlMapper中。同時他將你執(zhí)行的sql傳參進行也就是執(zhí)行變量進行了通配,然后映射到model中。
mybatis中的大致執(zhí)行過程:通過factory方法獲取sqlSession,通過MapperProxy代理到dao--執(zhí)行底層數據庫操作,===“據經過controller 再經過service 然后執(zhí)行service中的相關方法并關聯到mapper 再執(zhí)行mapper.xml中的sql語句"
以下是JDBC和Mybatis的區(qū)別
JDBC:
(1) 加載JDBC驅動,建立并獲取數據庫連接,創(chuàng)建statement對象
(2) 設置SQL語句的傳入參數
(3) 執(zhí)行SQL語句并獲取查詢結果
(4) 對查詢結果進行轉換處理并將處理結果返回
(5) 釋放資源
Mybatis:
(1) 連接池,dataSource,在驅動并連接的這個過程中優(yōu)化并解耦
JDBC第一步其實從效率角度來看是不合適的,因為無論什么數據庫都不可能支撐隨機和龐大的連接數,而且必不可免存在連接浪費的情況,Mybatis封裝了這些優(yōu)化的方法
(2)統(tǒng)一sql存取到XML
如果代碼寫在java塊中,在團隊中很可能出現兩個交叉的業(yè)務代碼使用類似的sql,而開發(fā)人員本身沒有交集,那么就會出現重復無用的SQL,而對SQL的修改代表對java文件的修改,需要重新編譯和打包部署。
Mybatis將sql統(tǒng)一存取到xml中,就算業(yè)務交叉,由于統(tǒng)一配置的緣故,sql在xml中一目了然,兩個跨組的程序員可以看到對方的sql,來判斷自己是否需要重用,使用xml可以減少代碼配置。
此外在java代碼中拼寫長SQL太惡心了
(3) 參數和結果集映射
sql的方式傳入需要的參數,如果存在多條件“或類型”的查詢,那么就代表你必須傳參進行SQL拼接,就算使用xml的方式的方式也不行。要么每個業(yè)務獨立配置xml中的sql,要么還是寫入java代碼中,或者以工具方式進行自動拼接
Mybatis使用映射的方式,方便model管理參數,同時以解析器的方式將參數動態(tài)憑借到sql,由于是model映射,查詢結果可以統(tǒng)一映射,而且mybatis對查詢結果集對了緩存處理,使得重復查詢進行了進一步優(yōu)化
(4)對多重復sql進行復用封裝
比如模板方法,將常用sql模塊化,直接調用。比如通用的save和getID之類的,只有表名和字段名有變化