网易首页 > 网易号 > 正文 申请入驻

Mybatis中mapper的xml解析详解

0
分享至

上一篇文章分析了mapper注解关键类MapperAnnotationBuilder,今天来看mapper的项目了解析关键类XMLMapperBuilder。

基础介绍

回顾下之前是在分析configuration的初始化过程,已经进行到了最后一步mapperElement(root.evalNode("mappers")),这个方法里有两种解析mapper的方法,一种是解析类,一种是解析xml文件,上一篇文章在讲解析类中的注解,今天说到的就是解析xml的流程,关键代码如下:

解析mapper有4种情况可以分成根据类解析和根据xml文件解析两类,这次是后面这类,主体方法还是比较简单。

首先根据inputStream, configuration, resource或url, configuration.getSqlFragments()四个参数初始化一个XMLMapperBuilder;

然后执行XMLMapperBuilder对象的parse方法;

初始化XMLMapperBuilder

初始化过程源码已在上图的右侧部分,初始化XMLMapperBuilder方法的流程与加载mybatis的配置文件关键类XMLConfigBuilder及其相似,都是通过xml文件创建XPathParser对象作为XMLMapperBuilder对象的parse属性。最后执行parse方法去解析xml文件内容。

实际上XMLMapperBuilder与XMLConfigBuilder都继承BaseBuilder类,通过名字也可以看出来他们采用的是构建者模式,结合他们的使用流程就能够更加理解mybatis采用构建者模式对不同的xml解析过程

在初始化方法中又出现了一个关键类MapperBuilderAssistant,这个在上一篇分析MapperAnnotationBuilder类是发现MapperAnnotationBuilder解析了所有的注解然后把解析的内容给到MapperBuilderAssistant对象,然后通过MapperBuilderAssistant对象生成的对象具体sql的MappedStatement对象。

这里可以大胆猜测XMLMapperBuilder应该也是一样,解析出xml中所有信息然后给到MapperBuilderAssistant去生产MappedStatement对象

XMLMapperBuilder和MapperAnnotationBuilder都是工具人,MapperBuilderAssistant才是真正生成MappedStatement对象的类

parse方法

parse方法比较简单在上图中也已经把源码贴出来了,主要分四步:验证重复加载、加载mapper节点并解析、绑定名称空间、解决未处理的方法。

第一三步比较简单就不在详细说了,而第四步是也就是parse方法最后三行代码,他的主要作用是解决在第二步解析mapper时不能处理的一些数据进行处理,代码比较简单不在详细分析了,源码如下:

configurationElement方法

可以看出来最最关键的方法还是parse方法的configurationElement方法,他才是真正解析mapper.xml的方法,方法源码如下图:

方法比较简单,就是读取对应节点的数据,进行解析,重点是调用的这些解析方法,可以看到一些我们平时最常见的比如mapper节点上的namespace属性,还有常见的resultMap节点、sql节点等。

这里我简单点就只看最后一行解析具体的select|insert|update|delete节点的方法,因为他们对应的就是我们具体的sql了。根据上图可以看到获取所有的这类节点,然后遍历生成了一个XMLStatementBuilder的对象并执行parseStatementNode方法。接下来来看XMLStatementBuilder类。

XMLStatementBuilder类

XMLStatementBuilder的源码如下图:

XMLStatementBuilder与XMLMapperBuilder一样都是继承BaseBuilder类,它的XNode类型属性context对应mapper文件中一个select、update等节点。初始化方法没什么说的,主要看parseStatementNode方法,上图中已经截图一部分,剩下部分如下图:

parseStatementNode方法并不复杂,都是在读取context的数据,主要是最后圈出来的代码,和上一篇解析MapperAnnotationBuilder类最后调用的是同一方法。

前面猜错了啊,XMLMapperBuilder连工具人都算不上,XMLStatementBuilder才算生成MappedStatement的工具人。不过仔细一想也是对的,XMLMapperBuilder对应的是一个mapper.xml文件,而要生成的MappedStatement对应的是具体的一条CRUD语句,一个xml是包含多条CRUD语句的。

总结

一个XMLMapperBuilder对应一个mapper.xml文件,而XMLMapperBuilder能够从xml文件中获取多个CRUD语句对应的节点,每个节点对应生成一个XMLStatementBuilder对象,XMLStatementBuilder解析节点中所有信息后与MapperAnnotationBuilder解析出注解中包含的信息一样交给MapperBuilderAssistant去生成一个MappedStatement。

Java程序员日常学习笔记,如理解有误欢迎各位交流讨论!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
张本宇又被气着了,儿子2-3薛飞,气人的不是输球而是不长记性

张本宇又被气着了,儿子2-3薛飞,气人的不是输球而是不长记性

小潌拍客在北漂
2026-01-17 21:35:53
加仓175%!北向资金锁定人形机器人唯一隐形王炸

加仓175%!北向资金锁定人形机器人唯一隐形王炸

财报翻译官
2026-01-18 06:17:02
知名女演员疑似官宣离婚,老公曾被曝行贿千万

知名女演员疑似官宣离婚,老公曾被曝行贿千万

深圳晚报
2026-01-15 19:41:16
三甲医院院士坦言:3种病其实是“福气”,不用宣称治疗

三甲医院院士坦言:3种病其实是“福气”,不用宣称治疗

橘子约定
2025-12-12 21:59:21
热搜热聊|双色球改规则:终结“巨奖梦想”,与彩民背道而驰。

热搜热聊|双色球改规则:终结“巨奖梦想”,与彩民背道而驰。

好笑娱乐君每一天
2026-01-17 06:20:58
1942年,毛泽东说延安经济困难,刘少奇从山东暗中运万两黄金支援

1942年,毛泽东说延安经济困难,刘少奇从山东暗中运万两黄金支援

大运河时空
2026-01-16 16:30:03
藏不住了!陈建斌自爆当年分手内幕,难怪吴越至今不婚不育

藏不住了!陈建斌自爆当年分手内幕,难怪吴越至今不婚不育

车窗起雾q
2026-01-18 02:26:34
洗米华24岁女儿英国毕业,洗米嫂前往参加毕业礼,继子晒三人合照

洗米华24岁女儿英国毕业,洗米嫂前往参加毕业礼,继子晒三人合照

小霍霍
2026-01-17 16:16:10
37年“涨薪传统”不破!重庆一公司今年涨20元月薪,向员工发致歉信

37年“涨薪传统”不破!重庆一公司今年涨20元月薪,向员工发致歉信

封面新闻
2026-01-17 21:08:15
被大陆列为“台独”顽固分子后,郑英耀口出狂言,崔天凯表态亮了

被大陆列为“台独”顽固分子后,郑英耀口出狂言,崔天凯表态亮了

文史旺旺旺
2026-01-16 21:33:13
陈浩民与女儿同框,14岁陈雅薷东南亚长相很大气,颜值没有爸爸高

陈浩民与女儿同框,14岁陈雅薷东南亚长相很大气,颜值没有爸爸高

丹妮观
2026-01-17 22:06:42
21岁胡桑诺夫未出战U23亚洲杯,乌兹比赛下半场时他将首发出战曼市德比

21岁胡桑诺夫未出战U23亚洲杯,乌兹比赛下半场时他将首发出战曼市德比

懂球帝
2026-01-17 19:40:01
600万解约金,巴萨为何留不住18岁天才?弗利克怒了

600万解约金,巴萨为何留不住18岁天才?弗利克怒了

浮萍足球
2026-01-18 03:03:13
为博流量!摆拍视频污名化成都,齐某(男,25岁)被采取刑事强制措施

为博流量!摆拍视频污名化成都,齐某(男,25岁)被采取刑事强制措施

极目新闻
2026-01-17 19:58:00
单打联盟第一,把一手差牌打出春天!对自己好点吧,你也不年轻了

单打联盟第一,把一手差牌打出春天!对自己好点吧,你也不年轻了

老梁体育漫谈
2026-01-18 00:04:23
49岁男子去世,每天雷打不动吃降压药,医生直言:犯了5个错误

49岁男子去世,每天雷打不动吃降压药,医生直言:犯了5个错误

观星赏月
2026-01-17 11:47:17
减肥成功,张家齐清瘦,颜值飙升,拒绝娱乐圈,安置岗位年薪曝光

减肥成功,张家齐清瘦,颜值飙升,拒绝娱乐圈,安置岗位年薪曝光

乐聊球
2026-01-09 13:38:47
数千万波斯人,不伺候阿塞拜疆权贵了?伊朗今夜,就是百年前清末

数千万波斯人,不伺候阿塞拜疆权贵了?伊朗今夜,就是百年前清末

南宗历史
2026-01-10 16:15:24
黄慧颐一句如你所愿,保剑锋求锤得锤,开年大戏《太平年》撤档了

黄慧颐一句如你所愿,保剑锋求锤得锤,开年大戏《太平年》撤档了

最新声音
2026-01-17 13:04:40
贺娇龙离世仅3天,知情人曝其丈夫如今状态,字字戳大众心窝

贺娇龙离世仅3天,知情人曝其丈夫如今状态,字字戳大众心窝

仁慈的视角
2026-01-17 10:04:58
2026-01-18 06:52:49
IT乐知
IT乐知
it乐知· 程序员的私房笔记
122文章数 1038关注度
往期回顾 全部

科技要闻

两枚火箭发射失利,具体原因正排查

头条要闻

李昊发挥神勇 U23国足点球战胜乌兹别克斯坦晋级四强

头条要闻

李昊发挥神勇 U23国足点球战胜乌兹别克斯坦晋级四强

体育要闻

三巨头走了俩,联盟笑柄却起飞了

娱乐要闻

马年春晚首次联排场外细节!

财经要闻

保不准,人民币会闪击6.8!

汽车要闻

林肯贾鸣镝:稳中求进,将精细化运营进行到底

态度原创

艺术
游戏
家居
健康
军事航空

艺术要闻

你绝对想不到!央美华宜玉的水彩画竟然如此震撼!

这下好了,英伦侦探风也给老钟玩懂了"/> 主站 商城 论坛 自运营 登录 注册 这下好了,英伦侦探风也给老钟玩懂了 廉颇 2026-01-17 返回专栏...

家居要闻

岁月柔情 现代品质轻奢

血常规3项异常,是身体警报!

军事要闻

普京谈及当前国际局势:世界太危险了

无障碍浏览 进入关怀版