mybatis源碼分析過程

mybatis源碼分析過程
1、準備期:
1.實例化sqlSessionFactoryBean(其實我認爲這個類叫sqlSessionFactoryServer更準確,他是mybatis框架啓動的入口)
a.加載configuration.xml和全部mapper.xml配置文件spring

b.加載各類配置參數
2.實例化BaseDao,其實就是爲了爲SqlSessionDaoSupport設置SqlSessionFactory,以便SqlSessionDaoSupport能夠從Factory中拿到Session。Session是SqlSessionTemplate去工廠SqlSessionFactory中拿到的sql

2、使用期和完成期:
3.有了Session就能夠在Dao中使用了。首先openSession
4.Dao中根據nameSpace+id去內存中找到具體的sql語句,而後根據傳入的參數從新進行組裝
5.數據庫查詢
6.根據數據庫查詢結果,組裝返回值
7.關閉Session數據庫

3、過程細節關注:
8.從3-8的過程裏面有connection和statement是被封裝在Executor中,事務也須要看,緩存也須要看
9.Spring的工廠模式,Spring的配置文件加載機制,mybatis的內存模型,sql到對象的組裝技巧,反射應用。這裏須要深刻理解Spring的源碼。緩存

10.實例:Bean實例化用到的兩個類(InitializingBean接口-afterPropertiesSet,ApplicationListener接口-onApplicationEvent)session

 

 

 

mybatis總結兩個維度:
1、流程思路
1.初始化mybatis,讀取spring配置,初始化mybatis的入口類SqlSessionFactoryBean(數據源、mapper.xml文件路徑、configuration文件路徑)
2.初始化mybatis,讀取mybatis配置,初始化核心數據結構類Configuration(讀取mybatis的配置文件、Environment配置信息、Mapper.xml配置文件)
3.定義Dao,全部Dao須要繼承SqlSessionDaoSupport,而且要注入SqlSessionFactory,以便Dao能夠獲得session進行數據庫操做
4.使用Dao,關注兩個參數(statement句柄和入參),statement句柄的做用是從Configuration中找到MappedStatement,入參是要給MappedStatement構造sql語句
5.執行sql語句,按照resultType或者resultMap處理數據庫操做結果resultSet數據結構

2、對象細節
(一)Configuration
1.保存setting信息
2.保存Environment信息(TransactionFactory【SpringManagedTransactionFactory】和DataSource)
3.保存mapperRegistry信息
4.保存mappedStatements信息mybatis

(二)SqlSessionFactoryBean
1.SqlSessionFactoryBean實現了Spring的FactoryBean<T>,InitializingBean, ApplicationListener
2.在InitializingBean的afterPropertiesSet方法中構造SqlSessionFactory的默認DefaultSqlSessionFactory對象,該對象中保存了Configuration對象app

(三)SqlSessionDaoSupport對象
全部Dao的父類,能夠獲得SqlSession。在實例化Dao的時候須要注入SqlSessionFactory對象。框架

(四)SqlSessionFactory對象
用來生產SqlSession對象,openSession和Configuration源碼分析

(五)DefaultSqlSession對象
包含Configuration,Executor,autoCommit,Configuration用於獲得各類信息數據,Executor也是經過Configuration建立的
SimpleExecutor和BaseExecutor是Executor的實現,Executor包裝的是Transaction對象
ManagedTransaction是Transaction的實現,他包裝的是Connection和Connection的提交和回滾

(六)MappedStatement對象
重要的是statementId,經過mapper.xml解析獲得,被保存在Configuration對象中


(七)XMLScriptBuilder和NodeHandler
sql語句xml文件解析


3、重點關注

MapperScannerConfigurer

相關文章
相關標籤/搜索