一、mybatis簡介:
MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。本文將通過debug的方式來了解其工作原理。
二、mybatis的工作流程與原理
1:讀取mybatis全局配置文件
將定義好的mybatis全局配置文件進行讀取,並包裝稱為一個InputStream對象。這個比較簡單,就不詳細分析
2:解析配置文件(mybatis-config.xml)
由SqlSessionFactoryBuilder類的bulid方法驅動,對包裝好的XML文件進行解析。很容易看到,其具體的解析任務是交給XMLConfigBuilder對象完成,並將讀取的數據存入Configuration的對象中
Configuration作為解析配置文件過程中,最重要的一個類,它的作用主要如下:
a.讀入配置文件
b.提供單例,為后續創建SessionFactory服務提供配置參數
c. 初始化配置信息
Mybatis的幾乎所有配置文件信息都是存儲在由XMLConfigBuilder構建的Configuration對象中。
3:SqlSessionFactory對象的創建
SqlSessionFactory對象由DefaultSessionFactory根據Configuration的信息去創建。
4:SqlSession的對象的創建
創建Executor對象,這是SqlSession對象去訪問數據庫的執行器,每一個SqlSession對象都維持着這樣一個Executor。到此SqlSession對象創建完成,可以開始對數據庫進行訪問了。
5:SqlSession的執行過程
采用了動態代理技術,代理類的具體操作封裝在invoke()方法之中,由此可見,SqlSession對結果進行了緩存,並封裝在一個HashMap之中,其中key為sql語句,value為查詢結果。