1.Mybatis中SqlSessionFactory使用
SqlSessionFactory是通过SqlSessionFactoryBuilder创建,主要用来创建SqlSession
Mybatis在通过Resources读取配置文件生成InputStream之后,通过SqlSessionFactoryBuilder的build方法来创建SqlSessionFactory,参数是配置文件的输入流对象InputStream
...
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config);
SqlSession session = factory.openSession()
...
2.SqlSessionFactoryBuilder类初始化
SqlSessionFactoryBuilder主要是来创建SqlSessionFactory的,其类方法如下图,可以接收多种形式的配置文件对象来生成SqlSessionFactory
SqlSessionFactoryBuilder有一个显示的构造方法,方法中没有具体的逻辑
public class SqlSessionFactoryBuilder {
public SqlSessionFactoryBuilder() {
}
...
}
3.SqlSessionFactoryBuilder创建SqlSessionFactory
主要看下build(InputStream)方法的逻辑
build(InputStream)方法会调用另一个三参数的build方法build(InputStream,String,Properties),其中传入的参数environment和properties为空
public class SqlSessionFactoryBuilder {
...
public SqlSessionFactory build(InputStream inputStream) {
return this.build((InputStream)inputStream, (String)null, (Properties)null);
}
...
}
3.1.XMLConfigBuilder生成Configuration
build(InputStream,String,Properties)方法逻辑:
创建XMLConfigBuilder对象,传入的参数是通过加载Mybatis配置文件得到的InputStream对象、空的String对象、空的Properties对象
调用XMLConfigBuilder的parse方法生成Configuration对象
调用build(Configuration)方法来生成SqlSessionFactory对象
public class SqlSessionFactoryBuilder {
...
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
SqlSessionFactory var5;
try {
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
var5 = this.build(parser.parse());
} catch (Exception var14) {
throw ExceptionFactory.wrapException("Error building SqlSession.", var14);
} finally {
ErrorContext.instance().reset();
try {
inputStream.close();
} catch (IOException var13) {
}
}
return var5;
}
...
}
继续查看build(Configuration)方法,该方法中创建一个DefaultSqlSessionFactory对象,调用构造方法时传递XMLConfigBuilder的parse方法得到的Configuration对象
public SqlSessionFactory build(Configuration config) {
return new DefaultSqlSessionFactory(config);
}
4.DefaultSqlSessionFactory对象的创建
DefaultSqlSessionFactory是SqlSessionFactory的默认实现类
有一个Configuration的属性,保存配置文件的信息,在构造方法中对Configuration属性进行赋值
public class DefaultSqlSessionFactory implements SqlSessionFactory {
private final Configuration configuration;
public DefaultSqlSessionFactory(Configuration configuration) {
this.configuration = configuration;
}
...
}
SqlSessionFactory是一个接口,定义了一系列创建SqlSession的方法
5.总结
Mybatis在通过Resources类将配置文件读取到InputStream流对象后,继续创建SqlSessionFactory对象
在使用SqlSessionFactoryBuilder创建SqlSessionFactory时,重点是解析配置文件,该过程通过XMLConfigBuilder类完成,解析后生成对应的Configuration对象,然后创建SqlSessionFactory接口的实现类DefaultSqlSessionFactory实例,并将Configuration对象赋值到DefaultSqlSessionFactory的属性中。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/8239.html