11、mybatis的功能架构分析
1、Mybatis功能架構(gòu)
1)API接口層:提供給外部使用的接口API,開(kāi)發(fā)人員通過(guò)這些本地API來(lái)操縱數(shù)據(jù)庫(kù)。接口層一接收到調(diào)用請(qǐng)求就會(huì)調(diào)用數(shù)據(jù)處理層來(lái)完成具體的數(shù)據(jù)處理。
2)數(shù)據(jù)處理層:負(fù)責(zé)具體的SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。它主要的目的是根據(jù)調(diào)用的請(qǐng)求完成一次數(shù)據(jù)庫(kù)操作。
3)基礎(chǔ)支撐層:負(fù)責(zé)最基礎(chǔ)的功能支撐,包括連接管理、事務(wù)管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來(lái)作為最基礎(chǔ)的組件。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐。
2、Mybatis基本工作原理及工作流程圖
3、Mybatis的工作原理文本描述
3、1 創(chuàng)建SqlSessionFactory
框架初始化時(shí),全局配置文件和sql映射文件中的內(nèi)容會(huì)經(jīng)過(guò)解析,最終添加在一個(gè)Configuration對(duì)象中,返回一個(gè)包含了Configuration的DefaultSqlSession對(duì)象。Mapper.xml中的增刪改查標(biāo)簽會(huì)被解析,每一個(gè)增刪改查標(biāo)簽都會(huì)被解析并封裝到一個(gè)MappedStatement中,此時(shí)會(huì)根據(jù)配置信息創(chuàng)建SqlSessionFactory;
3、2? 創(chuàng)建SqlSession
根據(jù)SqlSessionFactory 創(chuàng)建 SqlSession;
3、3 獲取接口的代理對(duì)象
通過(guò) SqlSession 對(duì)象獲取接口的代理對(duì)象,調(diào)用getMapper方法時(shí),使用MapperProxyFactory創(chuàng)建一個(gè)MapperProxy的代理對(duì)象,代理對(duì)象里邊包含DeafaultSqlSession(Executor)。
3、4 進(jìn)行具體的數(shù)據(jù)操作
通過(guò)Executor 進(jìn)行具體的sql預(yù)編譯、參數(shù)類(lèi)型映射和處理結(jié)果集操作。具體為:
StatementHandler 處理sql語(yǔ)句預(yù)編譯,設(shè)置參數(shù);
Parameterhandler 設(shè)置預(yù)編譯參數(shù)用的ResultHandler,處理結(jié)果集;
TypeHandler 在整個(gè)過(guò)程中進(jìn)行數(shù)據(jù)庫(kù)類(lèi)型和javaBean 類(lèi)型的映射;
4、Mybatis的核心組件功能分析
| Configuration | ?MyBatis所有的配置信息都保存在Configuration對(duì)象之中,配置文件中的大部分配置都會(huì)存儲(chǔ)到該類(lèi)中 |
| SqlSession | 作為MyBatis工作的主要頂層API,表示和數(shù)據(jù)庫(kù)交互時(shí)的會(huì)話,完成必要數(shù)據(jù)庫(kù)增刪改查功能 |
| Executor | MyBatis執(zhí)行器,是MyBatis 調(diào)度的核心,負(fù)責(zé)SQL語(yǔ)句的生成和查詢緩存的維護(hù) |
| StatementHandler | 封裝了JDBC Statement操作,負(fù)責(zé)對(duì)JDBC statement 的操作,如設(shè)置參數(shù)等 |
| ParameterHandler | ?負(fù)責(zé)對(duì)用戶傳遞的參數(shù)轉(zhuǎn)換成JDBC Statement 所對(duì)應(yīng)的數(shù)據(jù)類(lèi)型,處理預(yù)編譯 |
| ResultSetHandler | 負(fù)責(zé)將JDBC返回的ResultSet結(jié)果集對(duì)象轉(zhuǎn)換成List類(lèi)型的集合 |
| TypeHandler? | 負(fù)責(zé)java數(shù)據(jù)類(lèi)型和jdbc數(shù)據(jù)類(lèi)型(也可以說(shuō)是數(shù)據(jù)表列類(lèi)型)之間的映射和轉(zhuǎn)換 |
| MappedStatement? | MappedStatement維護(hù)一條<select|update|delete|insert>節(jié)點(diǎn)的封裝 |
| SqlSource | 負(fù)責(zé)根據(jù)用戶傳遞的parameterObject,動(dòng)態(tài)地生成SQL語(yǔ)句,將信息封裝到BoundSql對(duì)象中,并返回 |
| BoundSql | 表示動(dòng)態(tài)生成的SQL語(yǔ)句以及相應(yīng)的參數(shù)信息 |
接下來(lái)偷個(gè)懶,直接引用一位仁兄的分析過(guò)程
Mybatis(四):MyBatis核心組件介紹原理解析和源碼解讀
總結(jié)
以上是生活随笔為你收集整理的11、mybatis的功能架构分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 讯飞开放式骨传导耳机 iFLYBUDS
- 下一篇: A Boring Game