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

来源:互联网 发布:淘宝店铺买模版视频 编辑:程序博客网 时间:2024/06/10 02:52

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节点。

原创粉丝点击