Mybatis工作原理

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之類的,只有表名和字段名有變化

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容