`
gaojingsong
  • 浏览: 1201785 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【Mybatis源码阅读之XMLConfigBuilder 】

阅读更多

XMLConfigBuilder 继承自BaseBuilder



 

public SqlSessionFactory build(InputStream inputStream, String environment, Properties props) {

    try {

      XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, props);

      Configuration config = parser.parse();

      return build(config);

    } catch (Exception e) {

      throw ExceptionFactory.wrapException("Error building SqlSession.", e);

    } finally {

      ErrorContext.instance().reset();

      try {

        inputStream.close();

      } catch (IOException e) {

        // Intentionally ignore.  Prefer previous error.

      }

    }

  }

 

XMLConfigBuilder 构造方法传递三个参数inputStream, environment, props


 parse解析方法用来解析XML配置文件

  public Configuration parse() {

    if (parsed) {

      throw new BuilderException("Each MapperConfigParser can only be used once.");

    }

    parsed = true;

    parseConfiguration(parser.evalNode("/configuration"));

    return configuration;

 

  }

解析的配置文件如下:-->首先抓住根节点configuration


 然后解析根节点之下的子节点方法如下:

  private void parseConfiguration(XNode root) {

    try {

      //解析别名定义,使用了反射技术

      typeAliasesElement(root.evalNode("typeAliases"));

     //解析插件配置

      pluginElement(root.evalNode("plugins"));

      objectFactoryElement(root.evalNode("objectFactory"));

      objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));

      //解析属性文件配置

      propertiesElement(root.evalNode("properties"));

      settingsElement(root.evalNode("settings"));

      //解析数据库配置信息environments下面可以包含多个environment,每个environments就是一个数据库连接池,通过ID进行唯一性区分

      environmentsElement(root.evalNode("environments"));

      typeHandlerElement(root.evalNode("typeHandlers"));

      //解析SQL映射文件

      mapperElement(root.evalNode("mappers"));

    } catch (Exception e) {

      throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);

    }

  }

 

原创不易,欢迎打赏,请认准正确地址,谨防假冒



 

 



 

 

  • 大小: 40.7 KB
  • 大小: 30.7 KB
  • 大小: 66.8 KB
  • 大小: 34.7 KB
  • 大小: 39.3 KB
0
0
分享到:
评论

相关推荐

    mybatis3.x源码深度解析与最佳实践.pdf

    XMLConfigBuilder.parseConfiguration 方法是 MyBatis 中的核心方法之一,该方法负责解析 MyBatis 的配置文件,包括属性解析、加载 settings 节点、加载自定义 VFS、解析类型别名、加载插件、加载对象工厂、创建对象...

    MyBatis源码包

    标题中的"MyBatis源码包"指的是包含了MyBatis框架的源代码文件,这对于开发者来说是一份宝贵的学习资源。通过阅读源码,开发者可以深入理解MyBatis的工作原理,学习如何设计和实现一个高效的ORM框架,以及如何处理...

    源码分析专题之Mybatis课程一之源码分析与实现.pdf

    根据提供的文件内容,我们可以展开关于Mybatis源码分析的详细知识点介绍。Mybatis是一个流行的Java持久层框架,它用于简化与数据库交互的复杂性。源码分析是理解框架内部工作原理的绝佳方式,同时也能够加深对设计...

    mybatis-3.3.1源码

    在深入探讨MyBatis 3.3.1的源码之前,先了解一下MyBatis的基本概念和工作原理。 MyBatis的核心是SQL映射文件和SqlSessionFactory。SQL映射文件包含了SQL语句和结果映射,而SqlSessionFactory则负责创建SqlSession...

    Mybatis最新jar及源码

    `mybatis-3-mybatis-3.4.6`可能是一个包含Mybatis源码的另一个形式,方便开发者进行学习和调试。源码分析对于理解框架内部工作流程,以及自定义扩展非常有帮助。例如,你可以研究`org.apache.ibatis.builder.xml....

    MyBatis源码分析之日志logging详解

    首先,MyBatis源码中有一个XMLConfigBuilder类,这个类负责加载MyBatis的配置文件,包括日志配置。loadCustomLogImpl方法是加载日志配置的入口,通过这个方法,MyBatis可以加载指定的日志实现类,并将其设置到...

    Mybatis源码分析-上课笔记1

    在分析MyBatis源码时,可以采用宏观和微观两种视角。宏观上理解整个框架的架构和流程,微观上深入到具体的类和方法,通过阅读和调试代码来理解其实现细节。同时,绘制流程图或UML图能帮助更好地梳理组件间的交互。 ...

    mybatis-3-mybatis-3.5.7.zip源码

    通过`XMLConfigBuilder`解析这些配置,构建出`Configuration`对象,它是整个MyBatis框架的中心。 2. **SqlSessionFactory**:在MyBatis中,`SqlSessionFactory`是主要的工厂类,用于创建`SqlSession`实例。它是线程...

    Mybatis源码分析.md

    ### Mybatis源码分析 #### 1. 解析配置文件,创建SQLSessionFactory 在MyBatis框架中,创建`SQLSessionFactory`是初始化整个框架的重要步骤之一。这一过程涉及到了配置文件的读取与解析,以及如何构建出可以用于...

    源码分析专题之Mybatis课程一之源码分析与实现1

    对MyBatis源码的分析通常从XML配置文件解析开始,这是整个框架初始化的关键步骤。主要关注以下两个切入点: - **XMLConfigBuilder#parseConfiguration**:解析mybatis-config.xml文件,生成Configuration对象,...

    源码分析专题之Mybatis课程一之源码分析与实现2

    MyBatis 源码分析与实现 在深入探讨 MyBatis 源码之前,我们先了解一下 MyBatis 的基本架构。MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。其核心功能包括 SQL 映射文件、动态 SQL ...

    mybatis-3-mybatis-3.2.6

    在深入探讨MyBatis 3.2.6版本的源码之前,我们首先需要了解MyBatis的基本概念和功能。 MyBatis的核心部分主要包括SqlSessionFactory、SqlSession和Mapper接口。SqlSessionFactory是MyBatis的主要工厂类,负责创建...

    mybatis-3-master ,mybatis 3的源码 3.2

    在深入探讨MyBatis 3.2的源码之前,我们先了解一下MyBatis的基本概念和架构。 MyBatis的核心组件包括:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession和Mapper接口。SqlSessionFactoryBuilder用于构建...

    mybatis 3.4.5 源码欣赏 利于自我平时学习

    MyBatis 是一款著名的持久层框架,它支持定制化 SQL...通过阅读 MyBatis 3.4.5 的源码,不仅可以加深对 MyBatis 工作原理的理解,还能帮助我们更高效地解决实际开发中的问题,优化性能,甚至开发自己的 MyBatis 插件。

    mybatis-3-mybatis-3.5.8.tar.gz源码

    2. **XMLConfigBuilder**:解析mybatis-config.xml配置文件,构建Configuration对象。 3. **XMLMapperBuilder**:解析Mapper XML文件,生成MapperRegistry中的MapperConfig。 4. **MappedStatement**:封装了SQL的...

    mybatis笔记源码

    通过阅读源码,你可以深入理解 MyBatis 的工作原理,如动态 SQL、参数绑定、结果映射等核心概念。 在 MyBatis 中,Mapper 接口是业务逻辑与 SQL 查询的桥梁。Mapper XML 文件定义了 SQL 语句和方法映射,而 Mapper ...

    mybatis3.2.2 sqlmap通配实现

    在MyBatis中,`XMLConfigBuilder.java`是解析MyBatis配置文件的核心类。它负责读取XML配置文件,将XML元素转换为Java对象,如`SqlSessionFactoryBuilder`、`SqlSessionFactory`、`Configuration`等。在处理SQLMap时...

    mybatis:mybatis源码分析

    通过对MyBatis源码的深入分析,我们可以更清晰地理解其实现原理,更好地利用其特性,甚至定制自己的持久层解决方案。在阅读源码的过程中,还可以学习到设计模式、反射、AOP等Java编程技术,提升我们的编程能力。

    mybatis拦截器

    1. **解析配置文件**:`XMLConfigBuilder`类中的`pluginElement`方法用于解析`<plugins>`标签下的配置信息。通过反射实例化拦截器,并将其添加到全局配置对象`Configuration`中。 ```java private void ...

    MyBatis 的执行流程.pdf

    以上流程是基于MyBatis 3.5.5版本源码的分析,MyBatis的执行流程是建立在配置好的映射文件和接口绑定基础上的,通过动态代理机制生成Mapper接口的代理对象,并通过配置的处理器来处理SQL语句的输入输出。了解这一...

Global site tag (gtag.js) - Google Analytics