Mybatis解析——Configuration

    從之前的《Mybatis解析——SqlSessionFactoryBean》可以看出,Configuration在SqlSessionFactory的創建過程中是一個很重要的環節。

    在SqlSessionFactoryBean.class可以看到Configuration的創建方式,在未配置configurationProperties的情況下,這裏主要的參數是configLocation.getInputStream(),就是mybatis配置文件的路徑:即mybatis-config.xml

    mybatis-config.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>
    <settings>
        <setting name="callSettersOnNulls" value="true"/>
        <!--<setting name="logImpl" value="STDOUT_LOGGING" />-->
        <setting name="defaultStatementTimeout" value="40"/>
    </settings>

    <typeAliases>
        <typeAlias alias="PYunYingECPMRecord" type="me.ele.vas.cpt.server.model.PYunYingECPMDto"/>

    </typeAliases>

</configuration>
xmlConfigBuilder = new XMLConfigBuilder(this.configLocation.getInputStream(), (String)null, this.configurationProperties);
configuration = xmlConfigBuilder.getConfiguration();

XMLConfigBuilder中,通過super()初始化來一個Configuration實例。

private XMLConfigBuilder(XPathParser parser, String environment, Properties props) {
    super(new Configuration());
    this.localReflectorFactory = new DefaultReflectorFactory();
    ErrorContext.instance().resource("SQL Mapper Configuration");
    this.configuration.setVariables(props);
    this.parsed = false;
    this.environment = environment;
    this.parser = parser;
}

mybatis-config.xml文件解析

xmlConfigBuilder.parse();

private void parseConfiguration(XNode root) {
    try {
        this.propertiesElement(root.evalNode("properties"));
        Properties settings = this.settingsAsProperties(root.evalNode("settings"));
        this.loadCustomVfs(settings);
        this.typeAliasesElement(root.evalNode("typeAliases"));
        this.pluginElement(root.evalNode("plugins"));
        this.objectFactoryElement(root.evalNode("objectFactory"));
        this.objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
        this.reflectorFactoryElement(root.evalNode("reflectorFactory"));
        this.settingsElement(settings);
        this.environmentsElement(root.evalNode("environments"));
        this.databaseIdProviderElement(root.evalNode("databaseIdProvider"));
        this.typeHandlerElement(root.evalNode("typeHandlers"));
        this.mapperElement(root.evalNode("mappers"));
    } catch (Exception var3) {
        throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + var3, var3);
    }
}

XNode封裝了Node,XPathParser是xml文件的解析工具類


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章