一忍捡、架構(gòu)設(shè)計
Mybatis 的功能架構(gòu)分為三層
- API 接口層
提供給外部使用的接口 API,開發(fā)人員通過這些本地 API 來操作數(shù)據(jù)庫竖幔。接口層?接收
到調(diào)用請求就會調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理
MyBatis 和數(shù)據(jù)庫的交互有兩種方式- 使用傳統(tǒng)的 MyBatis 提供的API
- 使用 Mapper 代理的方式
- 數(shù)據(jù)處理層
負(fù)責(zé)具體的 SQL查找板乙、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。它主要的目的是根據(jù)調(diào)用的請求完成?次數(shù)據(jù)庫操作 -
基礎(chǔ)支撐層
負(fù)責(zé)最基礎(chǔ)的功能支撐募逞,包括連接管理蛋铆、事務(wù)管理、配置加載和緩存處理放接,這些都是
共用的東西刺啦,將他們抽取出來作為最基礎(chǔ)的組件。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐
二纠脾、主要構(gòu)件及其相互關(guān)系
構(gòu)件 | 描述 |
---|---|
SqlSession | 作為 MyBatis 工作的主要頂層API玛瘸,表示和數(shù)據(jù)庫交互的會話,完成必要數(shù)據(jù)庫增刪改查功能 |
Executor | MyBatis執(zhí)行器苟蹈,是 MyBatis 調(diào)度的核心糊渊,負(fù)責(zé)SQL語句的生成和查詢緩存的維護(hù) |
StatementHandler | 封裝了 JDBC Statement 操作,負(fù)責(zé)對 JDBC statement 的操作汉操,如設(shè)置參數(shù)再来、將 Statement 結(jié)果集轉(zhuǎn)換成 List 集合 |
ParameterHandler | 負(fù)責(zé)對用戶傳遞的參數(shù)轉(zhuǎn)換成 JDBC Statement 所需要的參數(shù) |
ResultSetHandler | 負(fù)責(zé)將 JDBC 返回的 ResultSet 結(jié)果集對象轉(zhuǎn)換成 List 類型的集合 |
TypeHandler | 負(fù)責(zé) java 數(shù)據(jù)類型和 JDBC 數(shù)據(jù)類型之間的映射和轉(zhuǎn)換 |
MappedStatement | MappedStatement 維護(hù)了?條<select | update | delete | insert>節(jié)點的封裝 |
SqlSource | 負(fù)責(zé)根據(jù)用戶傳遞的 parameterObject,動態(tài)地生成SQL語句磷瘤,將信息封裝到 BoundSql 對象中芒篷,并返回 |
BoundSql | 表示動態(tài)生成的SQL語句以及相應(yīng)的參數(shù)信息 |
三、總體流程
- 加載配置并初始化采缚,將核心配置文件內(nèi)容解析封裝到 Configuration针炉,將 SQL 的配置信息加載成為?個 mappedStatement 對象,存儲在內(nèi)存之中
- 觸發(fā)條件:加載配文件
- 配置來源于兩個地方:
① 配置文件(核心配置文件conf.xml扳抽,mapper文件*.xml)
② java 代碼中的注解
- 接收調(diào)用請求
- 觸發(fā)條件:調(diào)用 Mybatis 提供的API
- 傳入?yún)?shù):為 SQL 的 ID 和傳入?yún)?shù)對象
- 處理過程:將請求傳遞給下層的請求處理層進(jìn)行處理
- 處理操作請求
- 觸發(fā)條件:API接口層傳遞請求過來
- 傳入?yún)?shù):為 SQL 的 ID 和傳入?yún)?shù)對象
- 處理過程:
① 根據(jù) SQL 的 ID 查找對應(yīng)的 MappedStatement 對象
② 根據(jù)傳入?yún)?shù)對象解析 MappedStatement 對象篡帕,得到最終要執(zhí)行的 SQL 和執(zhí)行傳入?yún)?shù)
③ 獲取數(shù)據(jù)庫連接,根據(jù)得到的最終 SQL 語句和執(zhí)行傳入?yún)?shù)到數(shù)據(jù)庫執(zhí)行贸呢,并得到執(zhí)行結(jié)果
④ 根據(jù) MappedStatement 對象中的結(jié)果映射配置對得到的執(zhí)行結(jié)果進(jìn)行轉(zhuǎn)換處理镰烧,并得到最終的處理結(jié)果
⑤ 釋放連接資源
- 返回處理結(jié)果