您的位置:首页 > 其它

mybatis -- 初始化过程

2020-05-08 11:04 78 查看

一、 MyBatis的初始化做了什么
加载自己运行时所需要的配置信息
MyBatis的XML配置文件信息,会被加载进入MyBatis内部,使用Configuration 对象作为一个所有配置信息的容器,Configuration对象的组织结构和XML配置文件的组织结构几乎完全一样。MyBatis初始化的过程,就是创建 Configuration对象的过程。

二、MyBatis基于XML配置文件创建Configuration对象的过程
SqlSessionFactoryBuilder 根据传入的数据流生成Configuration对象,然后根据Configuration对象创建默认的SqlSessionFactory实例。

  1. 调用SqlSessionFactoryBuilder对象的build(inputStream)方法;
  2. 方法内部会根据输入流inputStream等信息创建XMLConfigBuilder对象;
  3. 调用XMLConfigBuilder对象的parse()方法
  4. 将XML配置文件内的信息解析成Configuration对象;
  5. 根据Configuration对象创建DefaultSessionFactory对象,返回SqlSessionFactory,供Client使用;

总结:当SqlSessionFactoryBuilder执行build()方法,调用了XMLConfigBuilder的parse()方法,解析成Configuration对象,然后调用一个参数为该对象的build方法,返回SqlSessionFactory对象。

SqlSessionFactoryBuilder相关的代码如下所示:

public SqlSessionFactory build(InputStream inputStream)
{
return build(inputStream, null, null);
}
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties)
{
try
{
//2. 创建XMLConfigBuilder对象用来解析XML配置文件,生成Configuration对象
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
//3. 将XML配置文件内的信息解析成Java对象Configuration对象
Configuration config = parser.parse();
//4. 根据Configuration对象创建出SqlSessionFactory对象
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.
}
}
}
//从此处可以看出,MyBatis内部通过Configuration对象来创建SqlSessionFactory,
public SqlSessionFactory build(Configuration config)
{
return new DefaultSqlSessionFactory(config);
}

三、涉及到的设计模式:Builder模式应用
SqlSessionFactory的创建
由于构造时参数不定,为其创建一个构造器Builder,将SqlSessionFactory的构建过程和表示分开:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: