国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

為什么 MyBatis 源碼中,沒有我那種 if···else

開發 前端
在MyBatis的兩萬多行的框架源碼中,使用了大量的設計模式對工程架構中的復雜場景進行解耦,這些設計模式的巧妙使用是整個框架的精華。

在MyBatis的兩萬多行的框架源碼中,使用了大量的設計模式對工程架構中的復雜場景進行解耦,這些設計模式的巧妙使用是整個框架的精華。

經過整理,大概有以下設計模式,如圖1所示。

圖片圖片

類型:創建型模式

工廠模式

SqlSessionFactory 的結構如圖2所示。

圖片圖片

工廠模式:簡單工廠是一種創建型模式,在父類中提供一個創建對象的方法,允許子類決定實例對象的類型。

場景介紹:SqlSessionFactory 是獲取會話的工廠,每次使用MyBatis 操作數據庫時, 都會開啟一個新的會話。在會話工廠的實現中,SqlSessionFactory 負責獲取數據源環境配置信息、構建事務工廠和創建操作SQL 的執行器,最終返回會話實現類。

同類設計:SqlSessionFactory、ObjectFactory、MapperProxyFactory 和DataSourceFactory。

單例模式

Configuration 單例配置類的結構如圖3所示。

圖片圖片

單例模式:是一種創建型模式,能夠保證一個類只有一個實例,并且提供一個訪問該實例的全局節點。

場景介紹:Configuration 是一個大單例,貫穿整個會話周期,所有的配置對象(如映射、緩存、入參、出參、攔截器、注冊機和對象工廠等)都在Configuration 配置項中初始化, 并且隨著SqlSessionFactoryBuilder 構建階段完成實例化操作。

同類場景:ErrorContext、LogFactory 和Configuration。

建造者模式

ResultMap 建造者模式的結構如圖4所示。

圖片圖片

建造者模式:使用多個簡單的對象一步一步地構建成一個復雜的對象,提供了一種創建對象的最佳方式。

場景介紹:建造者模式在MyBatis 中使用了大量的XxxxBuilder,將XML 文件解析到各類對象的封裝中,關注工眾號:碼猿技術專欄,回復關鍵詞:1111 獲取阿里內部Java性能調優手冊!使用建造者及建造者助手完成對象的封裝。它的核心目的是不希望把過多的關于對象的屬性設置寫到其他業務流程中,而是用建造者方式提供最佳的邊界隔離。

同類場景:SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XML StatementBuilder 和CacheBuilder。

類型:結構型模式

適配器模式

日志實現類的結構如圖5所示。

圖片圖片

適配器模式:是一種結構型模式,能使接口不兼容的對象也可以相互合作。

場景介紹:正是因為有太多的日志框架,包括Log4j、Log4j2 和Slf4J 等,而這些日志框架的使用接口又各有差異,為了統一這些日志框架的接口,MyBatis 定義了一套統一的接口,為所有的其他日志框架的接口做相應的適配。

同類場景:主要集中在對Log 日志的適配上。

代理模式

代理模式的實現結構如圖6所示。

圖片圖片

代理模式:是一種結構型模式,能夠提供對象的替代品或占位符。代理控制元對象的訪問,并且允許在將請求提交給對象前進行一些處理。

場景介紹:沒有代理模式就不存在各類框架。就像MyBatis 中的MapperProxy 實現類, 代理工廠實現的功能就是完成DAO 接口的具體實現類的方法,配置的任何一個DAO 接口調用的CRUD 方法,都會被MapperProxy 接管,調用到方法執行器等,并返回最終的數據庫執行結果。

同類場景:DriverProxy、Plugin、Invoker 和MapperProxy。

組合模式

解析節點類的結構如圖7所示。

圖片圖片

組合模式:是一種結構型模式,可以將對象組合成樹形結構以表示“部分—整體” 的層次結構。

場景介紹:在MyBatis XML 動態的SQL 配置中,共提供了9 種標簽(trim、where、set、foreach、if、choose、when、otherwise 和bind),使用者可以組合出各類場景的SQL 語句。而SqlNode 接口的實現就是每個組合結構中的規則節點,通過規則節點的組裝,完成規則樹組合模式的使用。

同類場景:主要體現在對各類SQL 標簽的解析上,以實現SqlNode 接口的各個子類為主。

裝飾器模式

二級緩存裝飾器的實現結構如圖8所示。

圖片圖片

裝飾器模式:是一種結構型設計模式,允許將對象放入包含行為的特殊封裝對象中, 為元對象綁定新的行為。

場景介紹:MyBatis 的所有SQL 操作都是經過SqlSession 調用SimpleExecutor 完成的, 而一級緩存的操作也是在簡單執行器中處理的。這里的二級緩存因為是基于一級緩存刷新的,所以在實現上,通過創建一個緩存執行器,包裝簡單執行器的處理邏輯,實現二級緩存操作。這里用到的就是裝飾器模式,也叫俄羅斯套娃模式。

類型:行為型模式

模板模式

SQL 執行模板模式如圖9所示。

圖片圖片

模板模式:是一種行為型模式,在超類中定義了一個算法的框架,允許子類在不修改結構的情況下重寫算法的特定步驟。場景介紹:存在一系列可被標準定義的流程,并且流程的步驟大部分采用通用邏輯,只有一小部分是需要子類實現的,通常采用模板模式來定義這個標準的流程。就像MyBatis 的BaseExecutor 就是一個用于定義模板模式的抽象類,在這個類中把查詢、修改的操作都定義為一套標準的流程。

同類場景:BaseExecutor、SimpleExecutor 和BaseTypeHandler。

策略模式

多類型處理器策略模式的結構如圖10所示。

圖片圖片

策略模式:是一種行為型模式,能定義一系列算法,并將每種算法分別放入獨立的類中,從而使算法的對象能夠互相替換。

場景介紹:在MyBatis 處理JDBC 執行后返回的結果時,需要按照不同的類型獲取對應的值,這樣就可以避免大量的if 判斷。所以,這里基于TypeHandler 接口對每個參數類型分別做了自己的策略實現。

同類場景:PooledDataSource、UnpooledDataSource、BatchExecutor、ResuseExecutor、SimpleExector、CachingExecutor、LongTypeHandler、StringTypeHandler 和DateTypeHandler。

迭代器模式

拆解字段解析實現的結構如圖11所示。

圖片圖片

迭代器模式:是一種行為型模式,能在不暴露集合底層表現形式的情況下遍歷集合中的所有元素。

場景介紹:PropertyTokenizer 用于MyBatis 的MetaObject 反射工具包下,用來解析對象關系的迭代操作。這個類在MyBatis 中使用得非常頻繁,包括解析數據源配置信息并填充到數據源類上,同時參數的解析、對象的設置都會使用這個類。

同類場景:PropertyTokenizer。

總結

通過梳理,MyBatis大約運用了10種左右設計模式。可以說,復雜且優秀的ORM 框架源碼在設計和實現的過程中都會使用大量的設計模式。

在解決復雜場景的問題時,需要采用分治、抽象的方法,運用設計模式和設計原則等相關知識,把問題合理切割為若干子問題,以便加以理解和解決。

學習源碼遠不是只是為了應付面試,更重要的是學習優秀框架在復雜場景下的解決方案。通過學習這些優秀的方案技術,可以提高對技術設計和實現的理解,擴展編碼思維,積累落地經驗。只有經過這樣長期的積累,我們才更有可能成為優秀的高級工程師和架構師。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2020-05-28 16:50:59

源碼分析 MybatisJava

2013-06-18 10:55:26

PhoneGap

2012-04-04 22:07:12

Android

2020-07-17 14:06:36

Scrum敏捷團隊

2012-02-28 09:11:51

語言Lua

2022-06-12 21:36:57

Hooksreact

2021-11-15 06:56:45

MyBatis開發項目

2024-03-12 00:00:00

RocketMQ服務端磁盤

2020-06-19 08:01:48

Kotlin 協程編程

2015-06-04 11:22:22

前端程序員

2012-06-18 14:51:09

Python

2019-09-17 15:30:13

Java編程語言

2014-09-22 10:06:07

2015-03-02 15:13:52

Apple Watch

2012-11-14 20:55:07

容錯服務器選型CIO

2014-01-17 14:39:18

12306 搶票

2023-07-23 17:19:34

人工智能系統

2014-01-09 09:24:40

2013-10-22 15:18:19

2021-04-20 08:02:08

業務數據用戶
點贊
收藏

51CTO技術棧公眾號

欧美在线精品一区| 久久影院资源网| 日韩在线不卡| 日本伊人精品一区二区三区观看方式 | 色av吧综合网| 日韩av一级大片| 欧美在线不卡| 亚洲成人国产精品| 国产在线精品免费| 51国产成人精品午夜福中文下载| 99久久精品国产亚洲精品 | 亚洲成人av一区二区三区| 国产精品网红福利| a91a精品视频在线观看| 国产免费观看高清视频| 女生影院久久| 国产精品女同一区二区三区| 日韩伦理在线一区| 人人妻人人澡人人爽精品欧美一区| 免费观看久久久久| 国产精品资源在线观看| 一个色综合导航| 亚洲视频第二页| 毛片一区二区| 精品国产一区久久久| 欧美风狂大伦交xxxx| 狠狠综合久久| 国产91精品久久久久久| 男人亚洲天堂| 欧美变态tickling挠脚心| 蜜桃av色综合| 亚洲色图图片网| av在线不卡免费观看| 国产精品高潮呻吟久久av无限| 亚洲综合另类小说| 日本女人高潮视频| 成人午夜激情影院| 拍拍拍999自拍偷| 亚洲国产精品久久久久婷婷884 | 国产一区二区三区黄视频 | 欧美在线三级| 精品一区二区三区视频日产| 日本成人中文字幕| 亚洲爆乳无码精品aaa片蜜桃| 久久久亚洲高清| 三上悠亚一区二区三区| 在线精品观看国产| 中国色在线日|韩| 久久久久久亚洲精品| 99久久精品网站| 四虎永久国产精品| 91麻豆视频网站| 调教视频在线观看| 日韩欧美一区二区在线视频| 青青国产精品| 成人性生交大片免费观看嘿嘿视频| 欧美专区一区二区三区| 日本免费不卡一区二区| 亚洲精品成人a在线观看| 久久久pmvav| 在线看国产精品| 国产欧美一区二区精品久久久| 精品国产日本| 国产三级欧美三级| 在线观看a视频| 欧美精品在线播放| 99精品国产99久久久久久福利| 欧美成人高潮一二区在线看| 欧美色另类天堂2015| 国产一区二区色噜噜| 91黄色精品| 不卡的av电影| 成人性爱视频在线观看| 中文字幕国产精品| 亚洲午夜极品| 日韩一级免费在线观看| 在线免费不卡电影| 制服诱惑亚洲| 国产精品二区在线观看| 国产色一区二区| 国产视频在线播放| 91wwwcom在线观看| 国产精品一二三四区| 超碰在线公开超碰在线| 日韩不卡中文字幕| 亚洲国产精品91| 老头吃奶性行交视频| 精品国产一区二区三区久久久蜜月 | 欧洲美女少妇精品| 国产亚洲一区二区在线| 欧美日韩午夜| 浓精h攵女乱爱av| 亚洲精品国精品久久99热| 97久久夜色精品国产| 亚洲熟妇av一区二区三区漫画| 欧美二区在线观看| 日韩在线欧美| 亚洲xxxx2d动漫1| 深夜精品寂寞黄网站在线观看| 国产精品videosex极品| 国产一级二级在线| 欧美成人黄色小视频| 狠狠久久亚洲欧美| 日本www在线| 国产精品久久久久久av福利| 91在线一区二区三区| 55av亚洲| 久久久久久草| 欧美日韩国产影院| 综合伊思人在钱三区| 国产aaaaa毛片| 中文字幕久久久| 麻豆久久久久久| 都市激情在线视频| 国产精品美女www爽爽爽视频| 91ph在线| 国产精品av在线播放| 久久精品视频网| 免费视频观看成人| 成年人深夜视频| 亚洲国产精品大全| 青青草视频一区| 欧美尤物美女在线| 国产久一道中文一区| 亚洲高清视频在线| 成人中文视频| 啊啊啊国产视频| 久久久久久久久久久成人| 国产天堂亚洲国产碰碰| 久久久精品一区二区毛片免费看| 亚洲va久久久噜噜噜久久狠狠 | 福利片在线免费观看| 亚洲国产精品成人精品| 麻豆精品视频在线观看视频| 96av在线| 2022中文字幕| 日韩成人网免费视频| 性高湖久久久久久久久| 在线中文字幕-区二区三区四区| 欧美日本乱大交xxxxx| 久久精品人人爽人人爽| 99av国产精品欲麻豆| 欧洲一级精品| 亚洲高清在线免费观看| 亚洲精品久久久久久国产精华液| 一区中文字幕| 国产一二三四在线视频| 午夜精品久久久久久99热| 中文字幕欧美一| 水蜜桃精品av一区二区| 国内三级在线观看| 日韩欧美亚洲v片| 色综合伊人色综合网| 久久先锋影音av| 清纯唯美日韩| 日本在线观看免费| 一区二区三区久久网| 久久资源免费视频| 五月综合激情日本mⅴ| 老司机精品久久| 亚洲伊人精品酒店| 性视频在线播放| 欧美国产视频在线观看| 在线播放亚洲激情| 尤物视频一区二区| 久久免费高清| 精品成人18| 全色精品综合影院| 综合久久国产| 2025国产精品视频| 欧美乱妇20p| 久久亚洲二区三区| 欧美影视一区| 日本精品另类| 色资源网在线观看| 亚洲国产精品女人| 国产98色在线| 亚洲国产又黄又爽女人高潮的| 国产丝袜美腿一区二区三区| 亚洲天堂偷拍| 麻豆视频久久| 黄视频在线观看网站| 黄在线观看网站| 91免费在线观看网站| 亚洲欧美国产日韩天堂区| 亚洲摸摸操操av| 精品一区二区三区在线观看国产 | 一区在线观看| 欧美高清影院| 久色视频在线| 僵尸世界大战2 在线播放| 91精品免费久久久久久久久| 亚洲欧洲激情在线| 欧美性xxxxxx| 国产日韩欧美麻豆| 欧美牲交a欧美牲交aⅴ免费真| 国产成人a视频高清在线观看| bestiality新另类大全| 久久久www免费人成精品| 欧美激情欧美|