mybatis_helloworld(2)_源码(二)
Connection connection);
public abstract SqlSession openSession(TransactionIsolationLevel transactionisolationlevel);
public abstract SqlSession openSession(ExecutorType executortype);
public abstract SqlSession openSession(ExecutorType executortype, boolean flag);
public abstract SqlSession openSession(ExecutorType executortype, TransactionIsolationLevel transactionisolationlevel);
public abstract SqlSession openSession(ExecutorType executortype, Connection connection);
public abstract Configuration getConfiguration();
}
b) SqlSessionFactory接口构建
i. SqlSessionFactoryBuilder类:构建SqlSessionFactory
ii. 我们使用的方法:build
[java]
public SqlSessionFactory build(Reader reader)
{
//调用重载方法
return build(reader, null, null);
}
public SqlSessionFactory build(Reader reader, String environment, Properties properties)
{
try
{
SqlSessionFactory sqlsessionfactory;
try
{
//根据reader封装XMLConfig相关信息
XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
//调用重载方法
sqlsessionfactory = build(parser.parse());
}
catch(Exception e)
{
throw ExceptionFactory.wrapException("Error building SqlSession.", e);
}
return sqlsessionfactory;
}
finally
{
ErrorContext.instance().reset();
try
{
reader.close();
}
catch(IOException e) { }
}
}
public SqlSessionFactory build(Configuration config)
{
//依据配置信息构建默认的SqlSessionFactory实现
return new DefaultSqlSessionFactory(config);
}
c) XMLConfigBuilder类:解析XML配置文件
i. 用到的主要方法:parse,parseConfiguration(就是按XML结构顺序解析,分别获取配置[SAX解析]);将数据封装到父类的configuration对象中
[java]
public Configuration parse()
{
if(parsed)
{
throw new BuilderException("Each MapperConfigParser can only be used once.");
} else
{
parsed = true;
parseConfiguration(parser.eva lNode("/configuration")); //XML文件的根目录
return configuration;
}
}
private void parseConfiguration(XNode root)
{
try
{
typeAliasesElement(root.eva lNode("typeAliases")); //解析typeAliases
pluginElement(root.eva lNode("plugins"));
objectFactoryElement(root.eva lNode("objectFactory"));
objectWrapperFactoryElement(root.eva lNode("objectWrapperFactory"));
propertiesElement(root.eva lNode("properties"));
settingsElement(root.eva lNode("settings"));
environmentsElement(root.eva lNode("environments")); //数据库配置
typeHandlerElement(root.eva lNode("typeHandlers"));
mapperElement(root.eva lNode("mappers")); //解析sql语句配置文件
}
catch(Exception e)
{
throw new BuilderException((new StringBuilder()).append("Error parsing SQL Mapper Configuration. Cause: ").append(e).toString(), e);
}
}
d)Con