Mybatis實現(xiàn)原理陋葡,步驟如下:
1.構(gòu)建SqlSessionFactory過程
SqlSessionFactory接口是Mybatis操作數(shù)據(jù)庫的入口铆铆,相當(dāng)于JDBC 的Connection 類型豌汇,它提供創(chuàng)建 Mybatis 核心接口SqlSession
創(chuàng)建過程:
第一步:XMLConfigBuilder 解析xml 配置文件 郎楼,生產(chǎn) Configuration對象,所有的配置信息
? ? ? ?都會解析到Configuration里面
第二步:Configuration對象去創(chuàng)建 SqlSessionFactory實現(xiàn)類 DefaultSqlSessionfactory,
? ? ? ? ?InputStreaminputStream = Resources.getResourceAsStream(resource)
? ? ? ? ?SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder.build(inputStream);
2. 生產(chǎn)SqlSession? sqlSessionFactory.openSession();
? SqlSession 是Mybatis實際的操作數(shù)據(jù)庫對象举哟,事務(wù),執(zhí)行器都是在創(chuàng)建SqlSession是生產(chǎn)迅矛。
? 創(chuàng)建步驟:
第一步:生成事務(wù)工廠對象 TransactionFactory,在事務(wù)工廠中創(chuàng)建事務(wù)對象妨猩。
第二步:生成執(zhí)行器Executor,執(zhí)行器有三種類型SIMPLE诬乞,REUSE册赛,BATCH 钠导。
SIMPLE:常規(guī)執(zhí)行器震嫉,默認就是此類型執(zhí)行器,每次執(zhí)行都會創(chuàng)建一個statement,用完后關(guān)閉
REUSE:可重用執(zhí)行器牡属,將statement存入map中票堵,操作map中的statement而不會重復(fù)創(chuàng)建statement
BATCH:批處理執(zhí)行器,doUpdate預(yù)處理存儲過程或批處理操作逮栅,doQuery提交并執(zhí)行過程
第三步:就是生成SqlSession的實現(xiàn)類DefaultSqlSession
3. SqlSession 通過映射器悴势,執(zhí)行操作
映射器是通過動態(tài)代理來實現(xiàn)的,通過動態(tài)代理措伐,生成Mapper的實現(xiàn)類特纤,和實際的執(zhí)行方法,執(zhí)行sql侥加。
下篇代理模式捧存,順便談SqSession 映射器原理
流程圖如下: