當前位置:成語大全網 - 書法字典 - Mybatis實施過程分析(附深度文章推薦& amp;ampamp面試問題集)

Mybatis實施過程分析(附深度文章推薦& amp;ampamp面試問題集)

如果要設計壹個半自動模仿Mybatis的框架,哪些環節是必不可少的?三思而行,肯定有以下幾個環節:

如果只考慮這三點,很容易實現壹個簡單的ORM框架,加上壹些反射和正則表達式就可以了。

那麽如果參考Mybatis,我們來看看它的幾個環節是怎麽設計的:

其實大致思路是壹樣的。妳需要壹個數據結構來存儲所有的變量,並通過接口代理調用Sqlsession中的內置方法。不同的是,真正的執行器又加了壹層,就是執行器,然後通過原來的JDBC把數據返回給調用者。當然,真正的Mybatis包括很多設計模式、數據源、緩存、動態SQL、數據庫事務、延遲加載處理等等。

為了驗證mybatis的執行過程,使用了兩種方式調用接口,如下所示:

& gt

這裏有壹個小點需要強調,真正的執行者是` ` Executor ` ` `,我們每次都使用下面的代碼:

通過查看源代碼,還可以看到SqlSession接口的默認實現類是DefaultSqlSession。

以及方法的實際執行,如selectList方法:

& gt

# {}是預編譯處理,$ {}是字符串替換。當Mybatis處理# {}時,會將sql中的# {}替換為?數字,調用準備好的報表的

設置分配值的方法;

Mybatis在處理的時候,是替換時間,也就是用壹個變量的值替換{}。

使用# {}可以有效防止SQL註入,提高系統安全性。

PS: MyBatis執行的本質是SQL,所以回歸本質可以簡單理解為PreparedStatement和相應的語句。

Dao接口是映射器接口,接口的全限定名是映射文件中namespace的值;接口的方法名是映射文件中映射器的語句的id值;接口方法中的參數是傳遞給sql的參數。

實現原理:mapper接口的工作原理是JDK動態代理。mybatis會為每個Mapper代理生成壹個mapperProxy對象,代理對象會攔截接口方法,接口方法會自動對應sqlsession,最後由' Executor '執行。

``不同的參數,方法不能重載``,為什麽?

如上所述,mybatis有壹個解析XML文件或接口的鏈接,它會構建壹個名為mapperStatement的對象來存儲Mapper的相關信息。每個dao接口方法在執行時是如何定位並找到對應的MapperStatement的?

源邏輯圖: