日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Mybatis對mapper的加載流程深入講解

瀏覽:220日期:2023-10-21 16:33:45

今天來分析Configuration初始化的最后一部分mapper的加載。​

加載方法mapperElement

XMLConfigBuilder配置Configuration的parseConfiguration方法還剩最后一行解析代碼:mapperElement(root.evalNode('mappers'));

mapperElement方法源碼與詳解如下圖:

Mybatis對mapper的加載流程深入講解

從源碼可以得出一些結(jié)論:

mappers節(jié)點(diǎn)支持mapper和package兩種類型子節(jié)點(diǎn);

package子節(jié)點(diǎn)只需要name一個屬性;

一個mapper子節(jié)點(diǎn)有且只能有url、resource、class三個屬性中其中一個,否則會拋出異常;

mapperElement解析兩種mappers子節(jié)點(diǎn),主要代碼我分成了4個部分,接下來逐一進(jìn)行深入解析。

解析包方法addMappers

首先來看解析包的方法使用的是configuration的addMappers方法,方法主要是涉及到一個MapperRegistry類型的屬性mapperRegistry,addMappers主要流程如下圖:

Mybatis對mapper的加載流程深入講解

addMappers方法主要涉及到的是MapperRegistry這個類,這個類有兩個屬性:config、knownMappers。 在config指向的是configuration,knownMappers存放這class文件對應(yīng)的MapperProxyFactory 。 MapperProxyFactory根據(jù)名字先猜測是創(chuàng)建mapper代理的工廠。

介紹完關(guān)鍵類,再來看addMappers主要分4步:

調(diào)用mapperRegistry屬性的addMappers(String packageName)方法這個方法會調(diào)用另外一個addMappers;

addMappers(String packageName, Class<?> superType)方法會遍歷指定包下面所有屬于superType子類的類,上一步傳遞的是Object.class,所以這里是遍歷所有類,然后調(diào)用addMapper(mapperClass)方法;

addMapper(mapperClass)方法首先需要判斷mapperClass必須是接口, 再判斷class是否已經(jīng)存在,存在會報異常 。不存在則實(shí)例化一個MapperProxyFactory對象并put進(jìn)knownMappers,最后根據(jù)class創(chuàng)建一個MapperAnnotationBuilder并調(diào)用parse方法。

最后是MapperAnnotationBuilder的parse方法,MapperAnnotationBuilder是解析mapper注解的,我們后面詳解。

加載package下的mapper總的流程看下來比較簡單,實(shí)際上就是 找到對應(yīng)包下面所有的接口,然后根據(jù)接口創(chuàng)建一個MapperProxyFactory放到configuration屬性mapperRegistry的knownMappers中 。

解析單個mapper

從解析單個mapper有三種情況,但是分兩種情況,一種是有resource或者url屬性的是直接根據(jù)屬性值生成一個XMLMapperBuilder對象,然后執(zhí)行parse方法,如果是由class屬性值和加載包的最后一步方法相似,調(diào)用mapperRegistry的addMapper方法。

XMLMapperBuilder的初始化和parse簡單介紹源碼如下圖:

Mybatis對mapper的加載流程深入講解

解析mapper.xml的XMLMapperBuilder和最開始解析mybatis-config.xml的XMLConfigBuilder一樣都是繼承至mybatis的BaseBuilder,并且初始化流程也差不多。

可以看出XMLMapperBuilder類是解析mapper.xml最關(guān)鍵的類,這個類比較復(fù)雜,接下來的文章再來專門講解它。

總結(jié)

mapper的注入支持兩種方式,單個mapper注入或者整個包下面注入,也可以按加載class文件或者xml文件分成兩種。單個mapper注入如果是根據(jù)url或者xml則是通過加載xml文件注入,通過url獲取掃描整個包加載則是class方式進(jìn)行注入。

通過xml加載是直接根據(jù)xml生成XMLMapperBuilder,然后執(zhí)行parse方法。

通過class加載則是接口類生成MapperProxyFactory,放到MapperRegistry的map屬性knownMappers中,最后通過MapperAnnotationBuilder執(zhí)行parse進(jìn)行解析,parse也會調(diào)用XMLMapperBuilder的parse方法。

后面的文章我們先解讀MapperAnnotationBuilder這個類,最終再來看最重要的類XMLMapperBuilder。

從目前源碼可以得出一些需要注意的點(diǎn):

一個mapper子節(jié)點(diǎn)有且只能有url、resource、class三個屬性中其中一個,否則會拋出異常; 一個mapper只能被加載一次,重復(fù)加載會拋出異常。

到此這篇關(guān)于Mybatis對mapper的加載流程深入講解的文章就介紹到這了,更多相關(guān)Mybatis對mapper的加載流程內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Mybatis 數(shù)據(jù)庫
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产亚洲一卡2卡3卡4卡新区| 欧美精品国产一区| 日韩精品久久久久久| 亚洲综合欧美| 日韩视频免费| 视频一区视频二区中文| 亚洲香蕉网站| 午夜久久中文| 日韩在线视频精品| 99精品视频在线| 亚洲国产一区二区三区在线播放| 日韩精品欧美| 99国产精品| 日本精品久久| 高潮久久久久久久久久久久久久| 国产一区二区三区日韩精品 | 免费视频一区二区三区在线观看| 99视频精品| 亚洲精品影视| 日韩精品久久久久久| 免费亚洲一区| 久久精品高清| 三级在线观看一区二区 | 国产精品伦理久久久久久| 久久蜜桃av| 在线看片一区| 日韩综合一区| 亚洲成人三区| 国产日韩在线观看视频| 日韩国产综合| 天堂精品久久久久| se01亚洲视频| 国产另类在线| 国产激情一区| 亚洲欧美日韩综合国产aⅴ| 国产精品一区二区美女视频免费看| 久久电影tv| 欧美一级网站| 免费成人av在线播放| 亚洲精品**中文毛片| 日韩av资源网| 老司机精品久久| 亚洲91精品| 成人在线视频区| 久久激情综合网| 免费在线成人网| 国户精品久久久久久久久久久不卡 | 久久久久久久久丰满| 国产日韩一区二区三区在线| 免费视频久久| 国产精品白丝久久av网站| 久久超级碰碰| 蜜桃av一区二区在线观看| 男女男精品网站| 国产资源在线观看入口av| 久久国产三级| 亚洲日产国产精品| 日韩天堂av| 亚洲激情不卡| 黑丝一区二区| 日韩一区二区免费看| 久久精品色播| 精品国产aⅴ| 久久免费精品| 韩国女主播一区二区三区| 精品国产美女a久久9999| 久久精品xxxxx| 国产麻豆一区| 免费在线欧美黄色| 久久的色偷偷| 成人羞羞视频在线看网址| 国产一二在线播放| 中文另类视频| 久久av一区| 日本一区二区三区视频在线看| 日韩中文字幕在线一区| 亚洲一级淫片| 国产精品毛片aⅴ一区二区三区| 欧美成人精品一级| 日韩高清欧美| 久久午夜精品一区二区| 日韩av资源网| 国产精品成人a在线观看| 中文字幕系列一区| 亚洲天堂久久| 日韩va亚洲va欧美va久久| 久久精品国产久精国产| 天堂网在线观看国产精品| 视频一区视频二区在线观看| 国产欧美日韩影院| 亚洲一本视频| 蜜臀精品一区二区三区在线观看| 啪啪亚洲精品| 免费成人网www| 日韩精品午夜视频| 日韩大片在线观看| 97精品久久| 欧美成人国产| 久久丁香四色| 日韩福利视频网| 欧美肉体xxxx裸体137大胆| 青青草伊人久久| 国产精品91一区二区三区| 国产精品mm| 在线免费观看亚洲| 久久久人人人| 亚洲精品影院在线观看| 亚洲成人不卡| 久久只有精品| 日韩国产欧美在线视频| 亚洲精品99| 日韩精品不卡一区二区| 国产三级一区| 91精品一区| 亚洲欧美日本国产| 亚洲黄页一区| 91精品福利| 欧美 日韩 国产精品免费观看| 老司机免费视频一区二区三区| 日韩三级一区| 日本v片在线高清不卡在线观看| 久久免费大视频| 日韩免费小视频| 日韩欧美自拍| 午夜影院一区| 蜜臀久久精品| 日韩激情一区| 四虎影视精品| 极品日韩av| 婷婷精品进入| 欧美成人亚洲| 亚洲欧美日本视频在线观看| 欧美高清一区| 激情91久久| 亚久久调教视频| 日本不卡不码高清免费观看| 夜夜嗨一区二区| 鲁大师影院一区二区三区| 亚洲神马久久| 日韩欧美四区| 鲁大师精品99久久久| 午夜久久中文| 国产视频亚洲| 日韩国产在线观看| 美女视频黄 久久| 日本免费一区二区三区四区| 亚洲特色特黄| 亚洲v天堂v手机在线| 91九色综合| 精品三级久久久| 欧美粗暴jizz性欧美20| 欧美搞黄网站| 日韩精品久久久久久久软件91| 国产日韩高清一区二区三区在线 | 亚洲一级少妇| 日韩视频二区| 麻豆免费精品视频| 91精品国产成人观看| 香蕉久久一区| 在线亚洲人成| 丝瓜av网站精品一区二区| 国产日韩欧美一区在线| 精品视频一二| 99国产精品久久久久久久 | 999国产精品999久久久久久| 免费在线视频一区| 97精品国产| 日韩va欧美va亚洲va久久| 欧洲av一区二区| 国产日韩欧美三级| 天使萌一区二区三区免费观看| 国产一区福利| 亚洲丝袜美腿一区| 久久久亚洲一区| 国产精品对白久久久久粗| 性色av一区二区怡红| 精品久久在线| 国产香蕉精品| 欧美精品三级在线| 亚洲人成网77777色在线播放| 亚洲福利国产| 日韩精品一区二区三区免费观看| 国产精品日本一区二区不卡视频| 夜夜精品视频| 伊人久久一区| 丝袜美腿亚洲一区| 亚洲免费播放| 国产精品7m凸凹视频分类| 欧美好骚综合网| 日本蜜桃在线观看视频| 福利一区二区三区视频在线观看| 亚洲精品系列| 香蕉精品999视频一区二区| 午夜久久一区| 国产精品日韩| 亚洲精品亚洲人成在线观看| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 欧美在线精品一区| 国产亚洲字幕| 嫩草伊人久久精品少妇av杨幂|