精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

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

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

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

圖片圖片

類型:創(chuàng)建型模式

工廠模式

SqlSessionFactory 的結構如圖2所示。

圖片圖片

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

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

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

單例模式

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

圖片圖片

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

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

同類場景:ErrorContext、LogFactory 和Configuration。

建造者模式

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

圖片圖片

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

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

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

類型:結構型模式

適配器模式

日志實現(xiàn)類的結構如圖5所示。

圖片圖片

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

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

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

代理模式

代理模式的實現(xiàn)結構如圖6所示。

圖片圖片

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

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

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

組合模式

解析節(jié)點類的結構如圖7所示。

圖片圖片

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

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

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

裝飾器模式

二級緩存裝飾器的實現(xiàn)結構如圖8所示。

圖片圖片

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

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

類型:行為型模式

模板模式

SQL 執(zhí)行模板模式如圖9所示。

圖片圖片

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

同類場景:BaseExecutor、SimpleExecutor 和BaseTypeHandler。

策略模式

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

圖片圖片

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

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

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

迭代器模式

拆解字段解析實現(xiàn)的結構如圖11所示。

圖片圖片

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

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

同類場景:PropertyTokenizer。

總結

通過梳理,MyBatis大約運用了10種左右設計模式??梢哉f,復雜且優(yōu)秀的ORM 框架源碼在設計和實現(xiàn)的過程中都會使用大量的設計模式。

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

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

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

2020-05-28 16:50:59

源碼分析 MybatisJava

2013-06-18 10:55:26

PhoneGap

2012-04-04 22:07:12

Android

2012-02-28 09:11:51

語言Lua

2020-07-17 14:06:36

Scrum敏捷團隊

2021-11-15 06:56:45

MyBatis開發(fā)項目

2022-06-12 21:36:57

Hooksreact

2024-03-12 00:00:00

RocketMQ服務端磁盤

2021-04-20 08:02:08

業(yè)務數(shù)據用戶

2020-06-19 08:01:48

Kotlin 協(xié)程編程

2023-07-23 17:19:34

人工智能系統(tǒng)

2015-03-02 15:13:52

Apple Watch

2015-06-04 11:22:22

前端程序員

2012-11-14 20:55:07

容錯服務器選型CIO

2012-06-18 14:51:09

Python

2014-09-22 10:06:07

2019-09-17 15:30:13

Java編程語言

2014-01-17 14:39:18

12306 搶票

2013-10-22 15:18:19

2014-01-09 09:24:40

點贊
收藏

51CTO技術棧公眾號

91老司机在线| 久久综合九色综合欧美98| 在线视频欧美性高潮| 亚洲欧美另类动漫| av中文字幕一区二区三区| 免费成人在线视频观看| 第九色区aⅴ天堂久久香| 91热门视频在线观看| 欧美中文在线免费| 国产18无套直看片| 欧美三级电影网址| 亚洲激情自拍偷拍| 精品欧美一区二区久久久伦| 无码人妻熟妇av又粗又大| 国产一区二区电影在线观看| 欧美裸体bbwbbwbbw| 毛片在线视频观看| 久草视频视频在线播放| 激情综合色播激情啊| 美女福利精品视频| 人妻丰满熟妇av无码久久洗澡 | 精品无人码麻豆乱码1区2区 | 岛国精品一区二区三区| a国产在线视频| 中文字幕欧美区| 国产精品免费视频一区二区| 成人a v视频| 综合五月婷婷| 亚洲免费视频观看| 人妻少妇偷人精品久久久任期| 丝袜老师在线| 亚洲欧美日韩中文字幕一区二区三区| 国产手机精品在线| 夜夜嗨av禁果av粉嫩avhd| 影音先锋亚洲电影| 这里只有精品视频在线| 中国xxxx性xxxx产国| 成人在线观看免费播放| 午夜国产不卡在线观看视频| 伊人精品久久久久7777| 日韩三级电影网| 国产a区久久久| 国产欧美精品一区二区| 国产无遮挡免费视频| 国产电影一区二区在线观看| 亚洲美女性视频| 久久久老熟女一区二区三区91| 日韩电影免费观看高清完整版| 亚洲欧美韩国综合色| 日韩欧美一区二区三区久久婷婷| 蜜桃视频在线观看www| 麻豆成人免费电影| 国产精品久久久久久久久久小说 | 视频一区亚洲| 蜜桃视频污在线观看| 国产麻豆日韩欧美久久| 国产日韩精品电影| 日韩视频在线观看一区| 亚洲午夜黄色| 欧美日韩成人在线视频| 国产尤物在线播放| 在线观看亚洲欧美| 国产精品入口久久| 精品久久久网站| 成人黄色一级大片| 国产精品一区二区免费福利视频 | 精品视频偷偷看在线观看 | 国产成人久久精品77777最新版本| 国产精品99久久久久久白浆小说| 国产真人真事毛片| 国产一区二区三区四区老人| 久久激情视频免费观看| 亚洲不卡的av| 99精品网站| 久久精品国产久精国产一老狼| 免费看的黄色录像| 日韩欧美二区| 日韩中文在线中文网三级| 免费无码一区二区三区| 亚洲婷婷丁香| 亚洲毛片在线看| 免费黄色片网站| 日韩88av| 伊人成人开心激情综合网| 在线观看国产精品一区| 国产一区网站| 色偷偷av一区二区三区乱| 国产免费美女视频| 亚洲网址在线| 欧美做爰性生交视频| 成人免费区一区二区三区| 国产模特精品视频久久久久| 日本三级韩国三级久久| 中文字幕永久在线观看| 国产一区二区成人久久免费影院 | 国产香蕉97碰碰久久人人| 亚洲一二三精品| 999国产精品视频| 欧美裸身视频免费观看| 一级免费在线观看| 久久av在线| 国产一区二区丝袜高跟鞋图片| 国产伦精品一区二区三区免.费| 国产福利一区二区三区在线视频| 国产原创精品| 男人天堂亚洲二区| 亚洲欧美偷拍三级| 国产不卡一区二区视频| 蜜臀国产一区| 555www色欧美视频| 国产精品一区二区人妻喷水| 日韩精品诱惑一区?区三区| 欧美精品videosex极品1| 一二三四区在线| 久久影院电视剧免费观看| 300部国产真实乱| 欧美最新精品| 日韩av在线免费| 国产av无码专区亚洲av毛网站| 久久婷婷av| 国产久一道中文一区| 黄网页免费在线观看| 在线观看成人小视频| 亚洲少妇18p| 欧美国产另类| 国产精品国产自产拍在线| 免费看成人av| av福利导福航大全在线| 欧美一区二区二区| 亚洲少妇xxx| 日韩高清在线一区| 欧美精品一区二区三区久久| 福利网站在线观看| 欧美一区二区女人| 国产精品免费在线视频| 日本成人中文字幕| 久久国产精品一区二区三区四区| 性欧美videoshd高清| 91精品欧美久久久久久动漫| 中文字幕91视频| 免费精品视频在线| 视频一区三区| 国产福利亚洲| 中文字幕不卡在线视频极品| 亚洲 欧美 中文字幕| 91麻豆福利精品推荐| 噜噜噜久久亚洲精品国产品麻豆| 波多野结衣在线一区二区| 久精品免费视频| 精品国自产在线观看| 一区二区三区在线视频播放| 亚洲成人激情小说| 在线精品观看| 久久综合色一本| 欧洲一区二区三区精品| 亚洲天堂第二页| 中文字幕一二区| 亚洲欧洲99久久| 久久久国产精品久久久| 狠狠综合久久av一区二区老牛| 国产91免费视频| brazzers在线观看| 亚洲免费视频观看| 中文字幕 亚洲视频| 最新高清无码专区| 波多野吉衣在线视频| 亚洲经典自拍| 久久国产精品-国产精品| 极品美女一区| 在线看日韩av| jlzzjlzzjlzz亚洲人| 亚洲国产视频a| 三级男人添奶爽爽爽视频| 久热精品视频| 视频一区二区视频| 动漫av一区| 4p变态网欧美系列| 午夜激情视频在线观看| 日韩一级大片在线观看| 日本在线视频免费观看| 国产色一区二区| 国产精品嫩草影视| 9国产精品视频| 亚洲看片网站| jazzjazz国产精品久久| 国产成人亚洲综合91| 国产写真视频在线观看| 亚洲黄色www网站| 亚洲天堂avav| 亚洲成人第一页| 色噜噜噜噜噜噜| 成人av电影在线| 国产三级三级看三级| 国产一区二区三区自拍 | 波多野结衣在线观看一区二区| 91久久国产精品91久久性色| 成年人黄色大片在线| 最近2019年日本中文免费字幕| 国产黄色一区二区| 色成人在线视频| 亚洲 日韩 国产第一区| av在线资源站| 欧美日韩在线看| 婷婷社区五月天| 成人在线视频首页| 亚洲免费av一区二区三区| 午夜国产精品视频| 色综合影院在线观看| 欧美午夜在线播放| 国产精品高潮呻吟久久av野狼| 91精品久久| 中文字幕在线看视频国产欧美在线看完整 | 五月天激情开心网| 欧美久久婷婷综合色| 高清乱码免费看污| 亚洲一区二区欧美| 五月天免费网站| 久久久久久97三级| 国产+高潮+白浆+无码| 国产精品资源网站| 可以看污的网站| 石原莉奈在线亚洲三区| 国产毛片视频网站| 五月婷婷激情视频| 亚洲激情中文1区| 最新日韩免费视频| www国产亚洲精品久久麻豆| 18深夜在线观看免费视频| 日本中文字幕不卡| 欧美女人性生活视频| 欧美视频网站| 一本二本三本亚洲码| 欧美日韩中文字幕一区二区三区| 九九九九九精品| jizz性欧美2| 2019国产精品视频| 成人影院网站ww555久久精品| 国产精品男人的天堂| 成人黄色免费短视频| 欧美有码在线视频| 极品在线视频| 久久人人爽人人爽人人片av高清| 91一区二区三区在线| 久久精品视频亚洲| 国产在线激情| 色偷偷av一区二区三区乱| 一区二区三区视频在线观看视频| 国产亚洲欧美另类中文| 欧美孕妇性xxxⅹ精品hd| 日韩精品免费电影| 日本视频在线观看一区二区三区| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 亚洲成a人片在线观看中文| 国产大学生自拍| 亚洲欧洲韩国日本视频| 成人免费视频国产免费观看| 亚洲桃色在线一区| a级片在线观看免费| 亚洲综合成人网| 黄色激情视频在线观看| 精品国产999| 波多野结衣 久久| 欧美专区在线观看一区| 在线免费观看av片| 欧美一区二区三区日韩| 丰满肥臀噗嗤啊x99av| 亚洲精品97久久| 欧美成人片在线| 色哟哟网站入口亚洲精品| 国产黄色在线免费观看| 欧美第一黄色网| 黄视频免费在线看| 国产精品欧美日韩久久| 国产精品视频一区二区三区综合 | 国产精品久久久久久久久久久久久久久久久久 | 亚洲三级免费观看| 日产电影一区二区三区| 91成人看片片| 国产黄色高清视频| 日韩精品免费综合视频在线播放 | 亚洲3p在线观看| 中文字幕在线免费观看视频| 国产精品老牛影院在线观看| 久久精品一级| 久久久久久一区| 日韩在线欧美| 每日在线观看av| 日韩不卡手机在线v区| 天天av天天操| 91在线云播放| 日韩欧美国产成人精品免费| 亚洲图片自拍偷拍| 国产日韩在线免费观看| 日韩视频免费观看高清完整版| 少妇激情av一区二区| 美日韩精品免费观看视频| 亚洲性受xxx喷奶水| 亚洲一区二区三区久久| 天堂网av成人| 国产又爽又黄ai换脸| 麻豆9191精品国产| 一起草最新网址| 国产亚洲精久久久久久| 久久久久久激情| 欧美亚洲动漫另类| 天天色棕合合合合合合合| 久久精品国产欧美激情| 日韩伦理在线一区| 亚洲在线观看视频| 国产一区二区三区四区五区传媒| 青青青青在线视频| 美女视频黄免费的久久 | 一区免费观看视频| 久久黄色精品视频| 欧美成人伊人久久综合网| av资源网在线观看| 日韩av毛片网| 粉嫩一区二区三区四区公司1| 亚洲综合网中心| 麻豆91精品| 国产精品边吃奶边做爽| 一区二区三区精品视频| 一级片视频播放| 亚洲欧美综合区自拍另类| 波多野结衣中文在线| 91理论片午午论夜理片久久| 欧美综合在线视频观看| 国产最新免费视频| av电影在线观看一区| 久久网一区二区| 日韩一区二区三区av| 麻豆视频在线| 国产精品视频久久久久| 国产一区二区精品福利地址| 成年人视频网站免费观看| 成人高清视频免费观看| 激情小说中文字幕| 日韩一区二区在线观看视频 | 一区二区视频免费在线观看| 国产欧美熟妇另类久久久 | 亚洲视频导航| 免费看精品久久片| 亚洲激情图片网| 欧美日韩五月天| 在线观看免费黄色| 国产精品亚洲视频在线观看| 精品久久久亚洲| www.这里只有精品| 国产精品欧美极品| 亚洲中文字幕在线观看| 日韩在线视频免费观看高清中文| 日韩在线电影| 国产91视频一区| 成人午夜精品一区二区三区| 国产午夜福利一区二区| 亚洲精品乱码久久久久久按摩观| а√在线中文在线新版| 久久精品国产理论片免费| 美女网站久久| 日韩不卡av在线| 欧美一区二区三区在线视频| 五月天激情在线| 成人精品一二区| 亚洲午夜一区| 性欧美成人播放77777| 欧美一a一片一级一片| 日本欧美在线视频免费观看| 亚洲综合色av| 在线国产精品一区| 免费看黄色的视频| 欧美日韩成人综合在线一区二区| av网址在线| 激情久久av| 青青国产91久久久久久| 91传媒免费观看| 精品成a人在线观看| 九色porny丨首页入口在线| 日韩欧美手机在线| 国产激情一区二区三区| 看片网址国产福利av中文字幕| 国产午夜精品一区理论片飘花 | 成人免费高清观看| 欧美日韩在线观看一区| 九一九一国产精品| 日本熟伦人妇xxxx| 一个人www欧美| 日韩一区二区三区高清在线观看| 精品视频在线观看一区| 欧美高清在线视频| www.久久久久久| 国产999精品视频| 欧美另类专区| 国产三级av在线播放 | 日韩二区三区| 91色在线观看| 国产精品普通话对白| 亚洲综合久久av一区二区三区| 亚洲精品久久视频| 欧美成人黄色| 欧美爱爱视频免费看|