上述代码的功能是根据配置文件mybatis-config.xml 配置文件,创建SqlSessionFactory对象,然后产生SqlSession,执行SQL语句。而mybatis的初始化就发生在第三句:SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream); 现在就让我们看看第三句到底发生了什么。
MyBatis初始化基本过程:
SqlSessionFactoryBuilder根据传入的数据流生成Configuration对象,然后根据Configuration对象创建默认的SqlSessionFactory实例。mybatis原理
初始化的基本过程如下序列图所示:

由上图所示,mybatis初始化要经过简单的以下几步:
1.调用SqlSessionFactoryBuilder对象的build(inputStream)方法;
2.SqlSessionFactoryBuilder会根据输入流inputStream等信息创建XMLConfigBuilder对象;
3.SqlSessionFactoryBuilder调用XMLConfigBuilder对象的parse()方法;
4.XMLConfigBuilder对象返回Configuration对象;
5.SqlSessionFactoryBuilder根据Configuration对象创建一个DefaultSessionFactory对象;
6.SqlSessionFactoryBuilder返回DefaultSessionFactory对象给Client,供Client使用。
SqlSessionFactoryBuilder相关的代码如下所示:
publicSqlSessionFactorybuild(InputStreaminputStream)
{
returnbuild(inputStream,null,null);
}
publicSqlSessionFactorybuild(InputStreaminputStream,Stringenvironment,Propertiesproperties)
{
try
{
//2.创建XMLConfigBuilder对象用来解析XML配置文件,生成Configuration对象
XMLConfigBuilderparser=newXMLConfigBuilder(inputStream,environment,properties);
//3.将XML配置文件内的信息解析成Java对象Configuration对象
Configurationconfig=parser.parse();
//4.根据Configuration对象创建出SqlSessionFactory对象
returnbuild(config);
}
catch(Exceptione)
{
throwExceptionFactory.wrapException("ErrorbuildingSqlSession.",e);
}
finally
{
ErrorContext.instance().reset();
try
{
inputStream.close();
}
catch(IOExceptione)
{
//Intentionallyignore.Preferpreviouserror.
}
}
}
//从此处可以看出,MyBatis内部通过Configuration对象来创建SqlSessionFactory,用户也可以自己通过API构造好Configuration对象,调用此方法创建SqlSessionFactory
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-40254-2.html
但这可能也是这个运动的魅力
美国没有预料到的是
还说什么别轻举妄动