1. 程式人生 > >【轉載】Mybatis工作原理

【轉載】Mybatis工作原理

引言

在mybatis的基礎知識中我們已經可以對mybatis的工作方式窺斑見豹(參考:《MyBatis————基礎知識》)。但是,為什麼還要要學習mybatis的工作原理?因為,隨著mybatis框架的不斷髮展,如今已經越來越趨於自動化,從程式碼生成,到基本使用,我們甚至不需要動手寫一句SQL就可以完成一個簡單應用的全部CRUD操作。從原生mybatis到mybatis-spring,到mybatis-plus再到mybatis-plus-spring-boot-starter。spring在發展,mybatis同樣在隨之發展。

萬變的外表終將迷惑人們的雙眼,只要抓住核心我們永遠不會迷茫!

工作原理原型圖

用最直觀的圖,來征服你的心!

工作原理解析

mybatis應用程式通過SqlSessionFactoryBuilder從mybatis-config.xml配置檔案(也可以用Java檔案配置的方式,需要新增@Configuration)中構建出SqlSessionFactory(SqlSessionFactory是執行緒安全的);

然後,SqlSessionFactory的例項直接開啟一個SqlSession,再通過SqlSession例項獲得Mapper物件並執行Mapper對映的SQL語句,完成對資料庫的CRUD和事務提交,之後關閉SqlSession。

說明:SqlSession是單執行緒物件,因為它是非執行緒安全的,是持久化操作的獨享物件,類似jdbc中的Connection,底層就封裝了jdbc連線。

詳細流程如下:

1、載入mybatis全域性配置檔案(資料來源、mapper對映檔案等),解析配置檔案,MyBatis基於XML配置檔案生成Configuration,和一個個MappedStatement(包括了引數對映配置、動態SQL語句、結果對映配置),其對應著<select | update | delete | insert>標籤項。 2、SqlSessionFactoryBuilder通過Configuration物件生成SqlSessionFactory,用來開啟SqlSession。 3、SqlSession物件完成和資料庫的互動: a、使用者程式呼叫mybatis介面層api(即Mapper介面中的方法) b、SqlSession通過呼叫api的Statement ID找到對應的MappedStatement物件 c、通過Executor(負責動態SQL的生成和查詢快取的維護)將MappedStatement物件進行解析,sql引數轉化、動態sql拼接,生成jdbc Statement物件 d、JDBC執行sql。

e、藉助MappedStatement中的結果對映關係,將返回結果轉化成HashMap、JavaBean等儲存結構並返回。

mybatis層次圖:

參考文章: