用什么軟件做樓盤(pán)微網(wǎng)站廣州新塘網(wǎng)站seo優(yōu)化
文章目錄
- 1.整體架構(gòu)圖
- 2. 基礎(chǔ)支撐層
- 2.1 類型轉(zhuǎn)換模塊
- 2.2 日志模塊
- 2.3 反射工具模塊
- 2.4 Binding 模塊
- 2.5 數(shù)據(jù)源模塊
- 2.6緩存模塊
- 2.7 解析器模塊
- 2.8 事務(wù)管理模塊
- 3. 核心處理層
- 3.1 配置解析
- 3.2 SQL 解析與 scripting 模塊
- 3.3 SQL 執(zhí)行
- 3.4 插件
- 4. 接口層
1.整體架構(gòu)圖
MyBatis 分為三層架構(gòu),分別是基礎(chǔ)支撐層、核心處理層和接口層,如下圖所示:
2. 基礎(chǔ)支撐層
2.1 類型轉(zhuǎn)換模塊
<typeAliase>
標(biāo)簽的別名機(jī)制,由基礎(chǔ)支撐層中的類型轉(zhuǎn)換模塊實(shí)現(xiàn)的;- JDBC 類型與 Java 類型之間的相互轉(zhuǎn)換,綁定實(shí)參、映射 ResultSet 場(chǎng)景中都有所體現(xiàn):
- 在 SQL 模板綁定用戶傳入實(shí)參的場(chǎng)景中,類型轉(zhuǎn)換模塊會(huì)將 Java 類型數(shù)據(jù)轉(zhuǎn)換成 JDBC 類型數(shù)據(jù);
- 在將 ResultSet 映射成結(jié)果對(duì)象的時(shí)候,類型轉(zhuǎn)換模塊會(huì)將 JDBC 類型數(shù)據(jù)轉(zhuǎn)換成 Java 類型數(shù)據(jù)。
2.2 日志模塊
MyBatis 提供了日志模塊來(lái)集成 Java 生態(tài)中的第三方日志框架,該模塊目前可以集成 Log4j、Log4j2、slf4j 等優(yōu)秀的日志框架。
2.3 反射工具模塊
MyBatis 的反射工具箱是在 Java 反射的基礎(chǔ)之上進(jìn)行的一層封裝,為上層使用方提供更加靈活、方便的 API 接口,同時(shí)緩存 Java 的原生反射相關(guān)的元數(shù)據(jù),提升了反射代碼執(zhí)行的效率,優(yōu)化了反射操作的性能。
2.4 Binding 模塊
通過(guò) SqlSession 獲取 Mapper 接口的代理,然后通過(guò)這個(gè)代理執(zhí)行關(guān)聯(lián) Mapper.xml 文件中的數(shù)據(jù)庫(kù)操作。通過(guò)這種方式,可以將一些錯(cuò)誤提前到編譯期,該功能就是通過(guò) Binding 模塊完成的。
2.5 數(shù)據(jù)源模塊
持久層框架核心組件之一就是數(shù)據(jù)源,MyBatis 自身提供了一套不錯(cuò)的數(shù)據(jù)源實(shí)現(xiàn),也是 MyBatis 的默認(rèn)實(shí)現(xiàn)。MyBatis 的數(shù)據(jù)源模塊中也提供了與第三方數(shù)據(jù)源集成的相關(guān)接口,這也為用戶提供了更多的選擇空間,提升了數(shù)據(jù)源切換的靈活性。
2.6緩存模塊
數(shù)據(jù)庫(kù)是實(shí)踐生成中非常核心的存儲(chǔ),數(shù)據(jù)庫(kù)性能的優(yōu)劣直接影響了上層業(yè)務(wù)系統(tǒng)的優(yōu)劣。
很多線上業(yè)務(wù)都是讀多寫(xiě)少的場(chǎng)景,在數(shù)據(jù)庫(kù)遇到瓶頸時(shí),緩存是最有效、最常用的手段之一(如下圖所示),正確使用緩存可以將一部分?jǐn)?shù)據(jù)庫(kù)請(qǐng)求攔截在緩存這一層,這就能夠減少一部分?jǐn)?shù)據(jù)庫(kù)的壓力,提高系統(tǒng)性能。
MyBatis 就提供了一級(jí)緩存和二級(jí)緩存,具體實(shí)現(xiàn)位于基礎(chǔ)支撐層的緩存模塊中。
2.7 解析器模塊
mybatis-config.xml 配置文件和 Mapper.xml 配置文件的解析。
2.8 事務(wù)管理模塊
持久層框架一般都會(huì)提供一套事務(wù)管理機(jī)制實(shí)現(xiàn)數(shù)據(jù)庫(kù)的事務(wù)控制,MyBatis 對(duì)數(shù)據(jù)庫(kù)中的事務(wù)進(jìn)行了一層簡(jiǎn)單的抽象,提供了簡(jiǎn)單易用的事務(wù)接口和實(shí)現(xiàn)。一般情況下,Java 項(xiàng)目都會(huì)集成 Spring,并由 Spring 框架管理事務(wù)。
3. 核心處理層
核心處理層是 MyBatis 核心實(shí)現(xiàn)所在,其中涉及 MyBatis 的初始化以及執(zhí)行一條 SQL 語(yǔ)句的全流程。
3.1 配置解析
MyBatis 有三處可以添加配置信息的地方,分別是:mybatis-config.xml 配置文件、Mapper.xml 配置文件以及 Mapper 接口中的注解信息。在 MyBatis 初始化過(guò)程中,會(huì)加載這些配置信息,并將解析之后得到的配置對(duì)象保存到 Configuration 對(duì)象中。
3.2 SQL 解析與 scripting 模塊
MyBatis 的最大亮點(diǎn)應(yīng)該要數(shù)其動(dòng)態(tài) SQL 功能了,只需要通過(guò) MyBatis 提供的標(biāo)簽即可根據(jù)實(shí)際的運(yùn)行條件動(dòng)態(tài)生成實(shí)際執(zhí)行的 SQL 語(yǔ)句。MyBatis 提供的動(dòng)態(tài) SQL 標(biāo)簽非常豐富,包括 <where> 標(biāo)簽、<if> 標(biāo)簽、<foreach> 標(biāo)簽、<set> 標(biāo)簽等。
MyBatis 中的 scripting 模塊就是負(fù)責(zé)動(dòng)態(tài)生成 SQL 的核心模塊。它會(huì)根據(jù)運(yùn)行時(shí)用戶傳入的實(shí)參,解析動(dòng)態(tài) SQL 中的標(biāo)簽,并形成 SQL 模板,然后處理 SQL 模板中的占位符,用運(yùn)行時(shí)的實(shí)參填充占位符,得到數(shù)據(jù)庫(kù)真正可執(zhí)行的 SQL 語(yǔ)句。
3.3 SQL 執(zhí)行
要執(zhí)行一條 SQL 語(yǔ)句,會(huì)涉及非常多的組件,比較核心的有:Executor、StatementHandler、ParameterHandler 和 ResultSetHandler。
其中,Executor 會(huì)調(diào)用事務(wù)管理模塊實(shí)現(xiàn)事務(wù)的相關(guān)控制,同時(shí)會(huì)通過(guò)緩存模塊管理一級(jí)緩存和二級(jí)緩存。SQL 語(yǔ)句的真正執(zhí)行將會(huì)由 StatementHandler 實(shí)現(xiàn)。StatementHandler 會(huì)先依賴 ParameterHandler 進(jìn)行 SQL 模板的實(shí)參綁定,然后由 java.sql.Statement 對(duì)象將 SQL 語(yǔ)句以及綁定好的實(shí)參傳到數(shù)據(jù)庫(kù)執(zhí)行,從數(shù)據(jù)庫(kù)中拿到 ResultSet,最后,由 ResultSetHandler 將 ResultSet 映射成 Java 對(duì)象返回給調(diào)用方,這就是 SQL 執(zhí)行模塊的核心。
3.4 插件
很多成熟的開(kāi)源框架,都會(huì)以各種方式提供擴(kuò)展能力。當(dāng)框架原生能力不能滿足某些場(chǎng)景的時(shí)候,就可以針對(duì)這些場(chǎng)景實(shí)現(xiàn)一些插件來(lái)滿足需求,這樣的框架才能有足夠的生命力。這也是 MyBatis 插件接口存在的意義。
4. 接口層
接口層是 MyBatis 暴露給調(diào)用的接口集合,這些接口都是使用 MyBatis 時(shí)最常用的一些接口,例如,SqlSession 接口、SqlSessionFactory 接口等。其中,最核心的是 SqlSession 接口,你可以通過(guò)它實(shí)現(xiàn)很多功能,例如,獲取 Mapper 代理、執(zhí)行 SQL 語(yǔ)句、控制事務(wù)開(kāi)關(guān)等。