MyBatis-3.4.2-源码分析12:XML解析之mapperElement(root.evalNode(mappers))
2019独角兽企业重金招聘Python工程师标准>>>
终于要讲到mapper的解析了,这个地方是最重要的地方,日常大部分程序员的时间就在这里。
---
stop in org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement
private void mapperElement(XNode parent) throws Exception {// 看到这里了if (parent != null) {// 开始遍历每1个节点for (XNode child : parent.getChildren()) {// 如果是package命名if ("package".equals(child.getName())) {String mapperPackage = child.getStringAttribute("name");configuration.addMappers(mapperPackage);} else {// 一般从这里开始执行// 获取resource的属性值String resource = child.getStringAttribute("resource");// 获取url的属性值String url = child.getStringAttribute("url");// 获取class的属性值String mapperClass = child.getStringAttribute("class");// 如果是指定了resource,其它都没有指定,就走这个分支if (resource != null && url == null && mapperClass == null) {// 看到这里了// 将文件路径保存到上下文中,ThreadLocal型ErrorContext.instance().resource(resource);// 读取文件流InputStream inputStream = Resources.getResourceAsStream(resource);//XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource,configuration.getSqlFragments());mapperParser.parse();} else if (resource == null && url != null && mapperClass == null) {ErrorContext.instance().resource(url);InputStream inputStream = Resources.getUrlAsStream(url);XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, url,configuration.getSqlFragments());mapperParser.parse();} else if (resource == null && url == null && mapperClass != null) {Class<?> mapperInterface = Resources.classForName(mapperClass);configuration.addMapper(mapperInterface);} else {throw new BuilderException("A mapper element may only specify a url, resource or class, but not more than one.");}}}}}
org.apache.ibatis.builder.xml.XMLMapperBuilder.parse
进入parse函数后,先解决
parameterMapElement(context.evalNodes("/mapper/parameterMap"));
stop in org.apache.ibatis.builder.xml.XMLMapperBuilder.parameterMapElement
看到一半,朋友说这个parameterMap很少用,所以不需要看了。
转载于:https://my.oschina.net/qiangzigege/blog/871933
MyBatis-3.4.2-源码分析12:XML解析之mapperElement(root.evalNode(mappers))相关推荐
- MyBatis 源码分析 - 映射文件解析过程
1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...
- mybatis高级操作及源码分析(一)
Mybatis中使用注解 or xml 文件? 注解使用姿势 下面以Select注解为例. @Select 的本质还是 xml 文件的形式,有两种方式@Select注解和@SelectProvider ...
- mybatis的使用及源码分析(八) mybatis的rowbounds分析
Mybatis提供了一个简单的逻辑分页类RowBounds,其原理类似于在内存中做了一个分页,不是数据库层面的分页,性能不算好,谨慎使用 一. RowBounds源码分析 1 RowBounds源码: ...
- jdk、spring、mybatis、线程的源码分析
基础篇 从为什么String=String谈到StringBuilder和StringBuffer Java语法糖1:可变长度参数以及foreach循环原理 Java语法糖2:自动装箱和自动拆箱 集合 ...
- Hadoop源码分析(12)
Hadoop源码分析(12) 1. journalnode客户端 在文档(11)中分析了初始化editlog的方法.在初始化之前其会根据集 群的配置状态选择不同的方式来进行初始化.在HA状态下,其 ...
- red5源码分析---12
red5源码分析-服务器处理视频数据 接着<red5源码分析-11>,本章假设客户端发来的是视频数据,下面就分析服务器如何处理这些数据的. 根据前面几章的分析,基于mina框架,数据到达服 ...
- Nginx 源码分析-- 模块module 解析执行 nginx.conf 配置文件流程分析 一
搭建nginx服务器时,主要的配置文件 nginx.conf 是部署和维护服务器人员经常要使用到的文件, 里面进行了许多服务器参数的设置.那么nginx 以模块 module为骨架的设计下是如何运用模 ...
- spring 源码分析(1)-xml文件解析
我们在最开始接触spring的时候,看到不少书spring入门的例子如下 ApplicationContext atx = new ClassPathXmlApplicationContext(&qu ...
- Tomcat源码分析——server.xml文件的加载
前言 作为Java程序员,对于tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载的进行分析. 源码分析 Bootstrap的 ...
- Tomcat7.0源码分析——server.xml文件的加载与解析
前言 作为Java程序员,对于Tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载和解析进行分析. 加载过程分析 Bootst ...
最新文章
- 自然水体辐射特性与数值模拟 pdf_【技术·航天】定量评估贡献 精准决策未来 ——气象卫星数据在数值预报系统中贡献的定量评估...
- Orange——The Data
- Abp vnext Web应用程序开发教程 1 —— 创建服务器端
- 全世界云计算宕机和中断[2013年-2014年集锦]
- EMNLP2020文档级关系抽取模型GAIN 论文Double Graph Based Reasoning for Document-level Relation Extraction
- Expected object of backend CPU but got backend CUDA for argument #4 ‘mat1‘
- 嵌入式linux中文繁体字库,嵌入式Linux下中文字体显示
- “麒麟计划”落地苍南,赋能外贸企业数字化转型!
- matlab简易画爱心
- xm-select getValue()获取不到值的解决方法
- 框架篇—MVC、MVP、MVCS、MVVM、VIPER使用关系总结
- Win7安全模式启动卡在Classpnp.sys
- Android 关于Android权重的真正理解
- 一个员工的离职成本有多高,超出想象
- 为Debian解决Mercury MW150US无线网卡驱动
- 时间序列matlab的实现
- NANK南卡lite Pro无线蓝牙耳机上手体验
- surface pro java_平板界的楷模!Surface Pro 4简直无敌了
- java生成db文件
- 08.ESP8266驱动WS2812彩灯