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);
}
}
原创不易,欢迎打赏,请认准正确地址,谨防假冒