My Batis 6 My Batis初始化过程:创建 Session 实例的过程
我们知道MyBatis的持久化操作离不开SqlSessionFactory对象,该对象由SqlSessionFactoryBuilde加载MyBatis的配置文件产生。SqlSessionFactory对象的openSession方法可以打开SqlSession对象。具体代码如下所示:
// 读取mybatis-config.xml 文件
Inputstream inputStream= Resources.getResourceAsStream("mybatis-config.xml");
// 初始化mybatis
// 创建SqlSessionFactory 类的实例
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建Session 实例
SqlSession session= sqlSessionFactory.openSession();
上述代码的功能是根据配置文件mybatis-config.xml,创建SqlSessionFactory 对象,然后产生SqlSession,执行SQL语句。而MyBatis的初始化就发生在第三句:
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
现在就让我们看看第三句到底发生了什么。
SqlSessionFactoryBuilder 根据传入的数据流生成 Configuration 对象,然后根据 Configuration 对象创建默认的 SqlSessionFactory 实例。
初始化的基本过程如下图所示:
由上图所示,我们可以得知MyBatis初始化要经过以下几步:
- (1)调用SqlSessionFactoryBuilder 对象的 build(inputStream)方法。
- (2)SqlSessionFactoryBuilder 会根据输入流 inputStream 等信息创建XMLConfigBuilder 对象。
- (3)SqlSessionFactoryBuilder 调用 XMLConfigBuilder 对象的parse()方法。
- (4)XMLConfigBuilder 对象解析 XML 配置文件返回 Configuration 对象。
- (5)SqlSessionFactoryBuilder 根据 Configuration 对象创建一个DefaultSessionFactory 对象,供客户端使用。
- (6)SqlSessionFactoryBuilder 返回 DefaultSessionFactory 对象给客户端,由此可见,SqlSessionFactory 是根据 MyBatis 的配置文件 mybatis-config.xml 创建的。