Mybatis 代码流程及实现原理解析(一)

Mybatis 主要涉及的配置文件:

1. sqlMapConfig.xml:这是一个主控文件,对于mybatis的全局配置。

2. 具体的mapper xml,这个文件包含具体的sql片段,parameters,result的配置。


对于第一个配置文件的处理,主要是在这个SqlSessionFactoryBuilder的这个方法进行处理:

public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
    try {
      XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
      return build(parser.parse());
    } catch (Exception e) {
      throw ExceptionFactory.wrapException("Error building SqlSession.", e);
    } finally {
      ErrorContext.instance().reset();
      try {
        reader.close();
      } catch (IOException e) {
        // Intentionally ignore. Prefer previous error.
      }
    }
  }
这个方法有一些多态的形参, 主要是一些额外的参数和不同的文件流形式。
看下这个parse的具体实现:

public Configuration parse() {
    if (parsed) {
      throw new BuilderException("Each XMLConfigBuilder can only be used once.");
    }
    parsed = true;
    parseConfiguration(parser.evalNode("/configuration"));
    return configuration;
  }

  private void parseConfiguration(XNode root) {
    try {
      propertiesElement(root.evalNode("properties")); //issue #117 read properties first
      typeAliasesElement(root.evalNode("typeAliases"));
      pluginElement(root.evalNode("plugins"));
      objectFactoryElement(root.evalNode("objectFactory"));
      objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
      settingsElement(root.evalNode("settings"));
      environmentsElement(root.evalNode("environments")); // read it after objectFactory and objectWrapperFactory issue #631
      databaseIdProviderElement(root.evalNode("databaseIdProvider"));
      typeHandlerElement(root.evalNode("typeHandlers"));
      mapperElement(root.evalNode("mappers"));
    } catch (Exception e) {
      throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
    }
  }

从上面方法可以看出:

1. Configuration.java 是mybatis中有关配置的一个总控类, 所以从配置文件中解析出来的元素都会成为这个类的一部分。

xml 样例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<properties resource="org/mybatis/example/config.properties">
	  <property name="username" value="dev_user"/>
	  <property name="password" value="F2Fa3!33TYyg"/>
	</properties>
	<typeAliases>
	  <typeAlias alias="Author" type="domain.blog.Author"/>
	</typeAliases>
    <mappers>
        <!-- <mapper resource="com/skoyou/domain/User.xml"/> --> 
        <mapper resource="com/skoyou/mapper/User.xml"/>
    </mappers>
</configuration>


2. parseConfiguration方法包含对配置文件中每个节点的解析。下面是官方文档列出的所有支持的节点名称.具体地址可参考:http://mybatis.github.io/mybatis-3/zh/configuration.html



下片主要看下parseConfiguration方法中主要字方法的解析过程。重点会在mapper节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值