精品欧美一区二区三区在线观看 _久久久久国色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啪亚洲精品| 国产精品久久久久蜜臀| 欧美天天综合色影久久精品| 久久精品五月婷婷| 中文字字幕在线观看| 97久久视频| 日韩精品一区在线| 免费观看成人在线视频| 在线看福利影| 91一区在线观看| 91精品久久久久久久久| 日本网站免费观看| 欧美wwwww| 欧美精品一区二区在线播放| 久久精品香蕉视频| 18videosex性欧美麻豆| 久久综合av免费| 91欧美精品成人综合在线观看| 国产无遮挡免费视频| 成人高清av| 亚洲高清久久久久久| 在线观看亚洲色图| 中文在线а√天堂| 亚洲国产一区二区三区| 亚洲一区二区自拍偷拍| 污污的视频网站在线观看| 免费观看的毛片| 亚洲福利合集| 欧美三区免费完整视频在线观看| 美女黄色免费看| 亚洲乱亚洲乱妇| 91在线精品一区二区三区| 91久久精品国产| 欧美一级淫片免费视频黄| 激情综合在线| 操日韩av在线电影| 欧美 日韩 成人| 豆花视频一区二区| 在线播放中文字幕一区| 久久久久久三级| 高潮在线视频| 一区二区三区成人| 椎名由奈jux491在线播放| 男人的天堂在线免费视频| 成人免费黄色在线| 91久久国产精品| 亚洲熟妇av乱码在线观看| 久久激情一区| 欧美有码在线视频| 日本三级小视频| 亚洲另类黄色| 91产国在线观看动作片喷水| 久久久久久久极品内射| 久久香蕉精品视频| 国产福利91精品一区二区| 欧美性猛交xxxx乱大交蜜桃| 国产日本在线播放| 男人添女人下部高潮视频在线观看| 国产精品国产馆在线真实露脸| 日韩欧美精品一区二区| 九九在线视频| 国产日韩欧美综合一区| 免费观看国产成人| 日av在线播放| 中文字幕精品在线不卡| 亚洲精品国产精品久久| 91社区在线观看| 国产精品乱码一区二区三区软件 | 亚洲优女在线| 精品毛片网大全| 116极品美女午夜一级| 欧美极品videos大乳护士| 激情久久av一区av二区av三区| 国精产品一区一区三区视频| 麻豆mv在线观看| 日韩欧美国产网站| 精品999在线| 国产在线视频欧美一区| 欧美va亚洲va香蕉在线| 亚洲观看黄色网| 精品国产一区一区二区三亚瑟| 国产一级揄自揄精品视频| 中文字幕求饶的少妇| 综合天堂av久久久久久久| 久久久久这里只有精品| 狠狠人妻久久久久久综合| 青青草视频一区| 97夜夜澡人人双人人人喊| 天天干天天做天天操| 成人av影院在线| 日韩av高清| 在线h片观看| 欧美视频一二三| 国产成年人视频网站| 91精品短视频| 揄拍成人国产精品视频| 欧美日韩精品一区二区三区视频播放| 亚洲区第一页| 国产欧美精品xxxx另类| 午夜精品久久久久久久99老熟妇| 91视频国产资源| 亚洲草草视频| 激情av在线| 欧美性受极品xxxx喷水| 麻豆精品国产传媒| 精品国产乱码久久久久久蜜坠欲下 | 好吊妞无缓冲视频观看| 99只有精品| 亚洲福利精品在线| 99在线视频免费| 亚洲黄色高清| 91在线观看免费网站| 免费一级在线观看播放网址| 亚洲女同ⅹxx女同tv| 日韩精品免费播放| 国产丝袜一区| 麻豆一区二区在线观看| 狠狠躁夜夜躁人人爽视频| 成人国产电影网| 中文字幕99| 偷拍视频一区二区三区| 精品久久国产97色综合| 少妇愉情理伦三级| 久久精品日产第一区二区| 99久久自偷自偷国产精品不卡| 国产在线超碰| 午夜精品一区在线观看| 99中文字幕在线| 日韩激情免费| 日本精品免费观看| 少妇一区二区三区四区| 亚洲免费观看在线视频| 日韩大片一区二区| 精品国产乱码| 国产成人精品电影久久久| 色欲av伊人久久大香线蕉影院| 1024成人网色www| 国产一区二区在线免费播放| 亚洲永久精品唐人导航网址| 97国产精品视频| 亚洲av无码乱码国产精品久久| 男女污视频在线观看| 欧美三级免费| 91精品网站| 免费黄色在线看| 欧美日韩一级二级| 成人无码精品1区2区3区免费看 | 国产情人综合久久777777| 久久免费视频3| 久久亚州av| 国内免费精品永久在线视频| 亚洲h视频在线观看| 亚洲精品欧美综合四区| 欧美色图校园春色| 一区二区电影| 99国内精品久久久久久久软件| 久做在线视频免费观看| 制服.丝袜.亚洲.中文.综合| 一级片一级片一级片| 精品一区二区影视| 中文字幕の友人北条麻妃| 美女精品视频在线| 欧美国产第二页| 亚洲精品一级片| 香蕉加勒比综合久久| 2一3sex性hd| 欧美亚洲自偷自偷| 欧洲在线视频一区| 国产乱子精品一区二区在线观看| 色av中文字幕一区| 国产日韩欧美一区二区东京热 | 久久久久久免费观看| 国产99久久久国产精品潘金| 丝袜人妻一区二区三区| 妖精视频一区二区三区 | 久久伊人国产| 久久成人在线视频| 免费a视频在线观看| 欧美体内谢she精2性欧美| 摸摸摸bbb毛毛毛片| 九九热在线视频观看这里只有精品| 国产系列第一页| eeuss国产一区二区三区四区| 午夜精品www| 熟女少妇a性色生活片毛片| 黄色在线观看视频网站| 日韩免费性生活视频播放| 国产无码精品在线播放| 久久久亚洲精品一区二区三区| 密臀av一区二区三区| 亚洲九九视频| 六十路精品视频| 99热这里有精品| 97久久国产精品| 成人高潮成人免费观看| 日韩欧美国产综合| 成人免费毛片视频| 一区二区三区欧美在线观看| 亚洲专区区免费| 极品销魂美女一区二区三区| 青青草国产精品视频| 成人羞羞动漫| 国产亚洲福利社区| 欧美一区=区三区| 97免费视频在线播放| 欧美videos极品另类| 亚洲精美色品网站| 国产又大又黑又粗| 色综合天天性综合| 久久高清无码视频| 亚洲欧洲日本在线| 中文字幕在线观看的网站| 国产在线国偷精品免费看| 男女av免费观看| 国模 一区 二区 三区| 亚洲福利av| 尤物tv在线精品| 国产精品免费一区二区三区在线观看| 久久xxx视频| 91精品国产成人| 在线免费观看的av| 日韩亚洲精品视频| 国产小视频在线| 亚洲成人看片| 国产午夜精品美女视频明星a级| 99视频免费看| 欧美丝袜丝nylons| 91精品国产高清一区二区三密臀| 夜夜爽夜夜爽精品视频| 天堂а√在线中文在线鲁大师| 99国产精品一区| 中文字幕99页| 国产精品亚洲成人| 手机精品视频在线| 美日韩一区二区三区| 国产日韩成人内射视频| 亚洲欧美日本国产专区一区| 老子影院午夜伦不卡大全| 亚洲欧洲美洲一区二区三区| 日韩一区免费观看| 亚洲裸色大胆大尺寸艺术写真| 国产伦精品一区二区三区照片| 成人av在线播放| 成人国产精品日本在线| 亚洲天堂1区| 国产精品久久久999| 波多视频一区| 日韩免费av在线| 范冰冰一级做a爰片久久毛片| 欧洲成人午夜免费大片| 九色porny自拍视频在线播放| 欧美激情一区二区三区成人| 日本三级在线观看网站| 欧美激情视频播放| 成人免费高清观看| 98视频在线噜噜噜国产| 狼人综合视频| 欧美在线欧美在线| 日韩电影大全网站| 国产精品福利无圣光在线一区| 亚洲日本在线观看视频| 国产成人jvid在线播放| 成人av色网站| 成人精品一区二区三区| 免费看一区二区三区| 国产精品二区在线观看| 麻豆一区一区三区四区| 久久综合九色欧美狠狠| 亚洲人和日本人hd| 先锋影音一区二区三区| 久久久国产精品| 男人天堂a在线| 国产日韩专区| 亚洲天堂网一区| 国产经典欧美精品| 欧亚乱熟女一区二区在线| 久久免费国产精品| www.99re6| 亚洲福利视频一区二区| 免费看日批视频| 欧美高清视频一二三区| 韩国av免费在线观看| 亚洲三级av在线| 国产最新在线| 97精品国产97久久久久久春色| 三上悠亚亚洲一区| 成人两性免费视频| 精品在线网站观看| 亚洲精品tv久久久久久久久| 综合激情视频| 99精品人妻少妇一区二区| 免费的国产精品| 日韩高清一二三区| 国产午夜精品久久| 久操视频免费在线观看| 色婷婷综合久久| 亚洲大尺度视频| 国产小视频国产精品| 1stkiss在线漫画| 国产成人在线一区二区| 亚洲综合影院| 亚洲精品自在在线观看| 亚洲毛片在线| 午夜大片在线观看| 久久精品在线免费观看| 青青草原免费观看| 欧美亚洲一区三区| 日本人妻丰满熟妇久久久久久| 中文字幕成人精品久久不卡| 成人性生交大片免费看网站| 国产精品日韩精品| 色天天色综合| 欧美日韩中文字幕在线播放| 日韩激情av在线| 无码一区二区精品| 亚洲人成电影网站色mp4| 亚洲国产av一区二区三区| 日韩美女天天操| 天堂地址在线www| 欧美在线激情网| 国产精品一区二区中文字幕| 丰满女人性猛交| 视频一区视频二区中文字幕| 熟妇高潮一区二区| 亚洲精品视频观看| 91精品国产乱码久久| 亚洲性猛交xxxxwww| 日韩伦理在线一区| 国产精品 日韩| 午夜精品国产| 日韩欧美亚洲另类| 国产精品久久影院| 波多野结衣激情视频| 精品无人国产偷自产在线| 99在线视频影院| 国产高清自拍一区| 欧美视频二区| 色偷偷中文字幕| 亚洲精品伦理在线| 国产色在线视频| 久久好看免费视频| 亚洲综合资源| 日本黄色a视频| 久草在线在线精品观看| 91免费在线看片| 一区二区免费| 3d精品h动漫啪啪一区二区| 国产精品久久久久久| 亚洲第一天堂久久| 亚洲欧洲日韩av| 国产免费福利视频| 欧美成人精品一区二区| 国产精品一区三区在线观看| 国产福利片一区二区| 国产在线一区观看| 波多野结衣家庭教师| 日韩一区二区在线看| 性爱视频在线播放| 国产二区一区| 伊人成年综合电影网| 久久福利小视频| 欧美性xxxx极品hd满灌| 成人网视频在线观看| 国产精品久久久久久久久久ktv| 欧美中文字幕一区二区| 黄色手机在线视频| 亚洲欧美在线另类| www.av日韩| 97香蕉超级碰碰久久免费软件| 欧美人妖在线观看| 欧美v在线观看| 中文子幕无线码一区tr | 欧美精品免费视频| aaa大片在线观看| 国产精品推荐精品| 亚洲一区在线| 99久久国产精| 欧美视频精品在线| 3d玉蒲团在线观看| 蜜桃精品久久久久久久免费影院 | 99re这里只有精品视频首页| 亚洲精品中文字幕乱码三区91| 综合网中文字幕| 亚洲午夜免费| 亚洲色欲综合一区二区三区| 国产欧美视频一区二区三区| 国产一区二区三区四区视频 | av免费不卡国产观看| 蜜桃精品久久久久久久免费影院| 麻豆精品国产传媒mv男同| 久久黄色小视频| 亚洲日韩中文字幕| 日韩激情精品| 欧美黄色一级片视频| 亚洲免费色视频| 精品亚洲综合| 国产精品日本一区二区| 免费在线一区观看| 日韩欧美不卡视频| 久久久久www|