MyBatis加載流程

原文鏈接:https://blog.csdn.net/varyall/article/details/78775412

1、加載配置文件,解析配置文件,MyBatis基於XML配置文件創建Configuration對象的過程
2、SqlSessionFactoryBuilder根據傳入的數據流生成Configuration對象,然後根據Configuration對象創建默認的SqlSessionFactory實例。創建SqlSessionFactoryBean,生產出來sqlSession,
3、SqlSession對象完成和數據庫的交
a.使用傳統的MyBatis提供的API;
 這是傳統的傳遞Statement Id 和查詢參數給 SqlSession 對象,使用 SqlSession對象完成和數據庫的交互;
b. 使用Mapper接口
 MyBatis 將配置文件中的每一個<mapper> 節點抽象爲一個 Mapper 接口,而這個接口中聲明的方法和跟<mapper> 節點中的<select|update|delete|insert> 節點項對應
4、Executor作爲Mybatis的核心器,負責sql動態語句的生成和查詢緩存的維護
StatementHandler 封裝了JDBC Statement操作,負責對JDBC statement 的操作,如設置參數等
ParameterHandler 負責對用戶傳遞的參數轉換成JDBC Statement 所對應的數據類型
ResultSetHandler 負責將JDBC返回的ResultSet結果集對象轉換成List類型的集合
TypeHandler 負責java數據類型和jdbc數據類型(也可以說是數據表列類型)之間的映射和轉換
MappedStatement  MappedStatement維護一條<select|update|delete|insert>節點的封裝

5、Executor依靠MappedStatement  和數據庫進行交互

 


1、加載配置文件(數據源,以及映射文件),解析配置文件,生成Configuration,MapperedStatement
2、通過使用Configuration對象,創建sqlSessionFactory,用來生成SqlSeesion
3、sqlSession通過調用api或者mapper接口傳入statementId找到對應的MapperedStatement,來調用執行sql
4、通過Executor核心器,負責sql動態語句的生成和查詢緩存的維護,來進行sql的參數轉換,動態sql的拼接,生成Statement對象
5、藉助於MapperedStatement來訪問數據庫,它裏面封裝了sql語句的相關信息,以及返回結果信息


(1)加載配置:配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,將SQL的配置信息加載成爲一個個MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。
(2)SQL解析:當API接口層接收到調用請求時,會接收到傳入SQL的ID和傳入對象(可以是Map、JavaBean或者基本數據類型),Mybatis會根據SQL的ID找到對應的MappedStatement,然後根據傳入參數對象對MappedStatement進行解析,解析後可以得到最終要執行的SQL語句和參數。
(3) SQL執行:將最終得到的SQL和參數拿到數據庫進行執行,得到操作數據庫的結果。
(4)結果映射:將操作數據庫的結果按照映射的配置進行轉換,可以轉換成HashMap、JavaBean或者基本數據類型,並將最終結果返回。

(A)根據SQL的ID查找對應的MappedStatement對象。
(B)根據傳入參數對象解析MappedStatement對象,得到最終要執行的SQL和執行傳入參數。
(C)獲取數據庫連接,根據得到的最終SQL語句和執行傳入參數到數據庫執行,並得到執行結果。
(D)根據MappedStatement對象中的結果映射配置對得到的執行結果進行轉換處理,並得到最終的處理結果。
(E)釋放連接資源。


MyBATIS中有三種executor:
SimpleExecutor -- SIMPLE 就是普通的執行器。
ReuseExecutor -執行器會重用預處理語句(prepared statements)
BatchExecutor --它是批量執行器
這些就是mybatis的三種執行器。你可以通過配置文件的settings裏面的元素defaultExecutorType,配置它,默認是採用SimpleExecutor如果你在Spring運用它
————————————————
版權聲明:本文爲CSDN博主「varyall」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/varyall/article/details/78775412

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章