我们可以知道MyBatis的持久化操作离不开SqlSessionFactory对象,这个对象是整个数据库映射关系经过编译后的内存镜像,该对象的openSession()方法可以打开SqlSession对象.该对象是由SqlSessionFactoryBuffer加载MyBatis的配置文件产生.
//读取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);
现在我们看看这一句到底发生了什么:
MyBatis初始化基本过程:
SqlSessionFactoryBuilder根据传入的数据流生成Configuration对象,然后根据Configuration对象创建默认的SqlSessionFactory实例
1.调用SqlSessionFactoryBuilder对象的build(inputStream)方法
2.SqlSessionFactoryBuilder会分居输入流inputStream等信息创建XMLConfigBuilder对象
3.SqlSessionFactoryBuilder调用XMLConfigBuilder对象的parse()方法
4.XMLConfigBuilder对象解析XML配置文件返回Configuration对象
5.SqlSessionFactoryBuilder根据Configuration对线创建一个DefaultSessionFactory对象
6.SqlSessionFactoryBuilder返回DefaultSessionFactory对象给客户端,供客户端使用