MyBatis启动主流程及SqlSessionFactoryBuilder
mybatis启动主流程
mybatis启动流程即获得SqlSessionFactory对象的流程,SqlSessionFactory是一个接口,其默认实现类是DefaultSqlSessionFactory,由SqlSessionFactoryBuilder的build方法构建。在我们初学MyBatis时一般会写一个方法获得SqlSessionFactory对象,代码如下:
public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory = null;
public static SqlSessionFactory getSqlSessionFactory() throws IOException {
if(sqlSessionFactory == null) {
// 获得配置文件输入流
Reader r = Resources.getResourceAsReader("mybatis_conf.xml");
// 通过MybatisSqlSessionFactoryBuilder构造SqlSessionFactory对象
sqlSessionFactory = new SqlSessionFactoryBuilder().build(r);
}
return sqlSessionFactory;
}
}
可以看到获得SqlSessionFactory对象比较简单,有如下几步:
- 获得配置文件的输入流对象,mybatis提供一个实用工具类Resources可以获得配置文件的输入流对象
- 创建SqlSessionFactoryBuilder对象
- 基于输入流对象,调用SqlSessionFactoryBuilder对象的build方法构建SqlSessionFatory对象
SqlSessionFactoryBuilder对象build方法
SqlSessionFactoryBuilder提供如个重载的build方法用来构造SqlSessionFactory对象
public class SqlSessionFactoryBuilder {
// inputStream表示要解析的配置文件的输入流
// environement表示所使用的环境的字符串,在mybatis配置文件中可以配置多个环境,说明使用哪个环境,可以为null
// properties是外部传入的属性文件对象,这个对象会作为Configuration对象的属性variables的值,可以为null
public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
try {
// 创建XMLConfigBuilder对象,XMLConfigBuilder对象用来解析mybatis对象,
XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
// parser.parse() 解析XML配置文件,并获得Configuration对象
// 其于配置文件对象,获得SqlSessionFactory对象,默认实现类为DefaultSqlSessionFactory
return build(parser.parse());
} catch (Exception e) {
throw ExceptionFactory.wrapException("Error building SqlSession.", e);
} finally {
ErrorContext.instance().reset();
try {
reader.close();
} catch (IOException e) {
// Intentionally ignore. Prefer previous error.
}
}
}
public SqlSessionFactory build(Configuration config) {
// 返回SqlSessionFactory对象,默认实现类为DefaultSqlSessionFactory
return new DefaultSqlSessionFactory(config);
}
}

浙公网安备 33010602011771号