第一天阅读源码及创建时序图。(第一次用prosson画时序图,挺丑。。)

1.  调用 SqlSessionFactoryBuilder 对象的 build(inputStream) 方法;

2.  SqlSessionFactoryBuilder 会根据输入流 inputStream 等信息创建XMLConfigBuilder 对象 ;

3.  SqlSessionFactoryBuilder 调用 XMLConfigBuilder 对象的 parse() 方法;

4.  XMLConfigBuilder 对象返回 Configuration 对象;

5.  SqlSessionFactoryBuilder 根据 Configuration 对象创建一个DefaultSessionFactory 对象;

6.  SqlSessionFactoryBuilder 返回 DefaultSessionFactory 对象给 Client ,供 Client使用。

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,用户也可以自己通过API构造好Configuration对象,调用此方法创建SqlSessionFactory
public SqlSessionFactory build(Configuration config)
{
return new DefaultSqlSessionFactory(config);
}

上述的初始化过程中,涉及到了以下几个对象:

  • SqlSessionFactoryBuilder : SqlSessionFactory的构造器,用于创建SqlSessionFactory,采用了Builder设计模式

  • Configuration :该对象是mybatis-config.xml文件中所有mybatis配置信息
  • SqlSessionFactory:SqlSession工厂类,以工厂形式创建SqlSession对象,采用了Factory工厂设计模式
  • XmlConfigParser :负责将mybatis-config.xml配置文件解析成Configuration对象,共SqlSessonFactoryBuilder使用,创建SqlSessionFactory
<p>当时的想法
xml文件会被XMLConfigBuilder的parse()方法解析,并存在XMLMapperBuilder的sqlFragments里 //用来存放sql片段的哈希表
private Map<String, XNode> sqlFragments; </P

  

http://xpenxpen.iteye.com/blog/1508749

https://www.jianshu.com/p/e739afb8fe31

https://www.cnblogs.com/mengheng/p/3739610.html

https://blog.csdn.net/u014297148/article/details/78696096

https://blog.csdn.net/l454822901/article/details/51829785

结合设计模式理解

最新文章

  1. C和指针 第十四章 习题
  2. java语法基础
  3. BZOJ 2743 树状数组
  4. Hadoop启动报Error: JAVA_HOME is not set and could not be found解决办法
  5. C#函数参数
  6. React Native 重新建项目遇到的一些问题
  7. SQL控制语句中内置函数讲解
  8. 新 四则运算题目 C++
  9. POJ 2942.Knights of the Round Table (双连通)
  10. LD1-M(简单图的判定+构造,Havel定理)
  11. 深入 理解 Statement 和 PreparedStatement
  12. [wiki]CDN
  13. python_百文买百鸡问题
  14. ccf 201903-5 317任务
  15. 总结JAVA----IO流中的File类
  16. Devops流程规范
  17. eclipse初学者的使用
  18. MSSQL数据库后台进程(线程)
  19. 错误 ORA-01102: cannot mount database in EXCLUSIVE mode 的处理方法
  20. Gulp:插件编写入门

热门文章

  1. 前端框架VUE
  2. Java的Annotation标签
  3. Oracle自我补充之OVER()函数介绍
  4. 新添加一块硬盘制作LVM卷并进行分区挂载
  5. Unity 3D UGUI Toggle用法教程
  6. HDU - 2892:area (圆与多边形交 求面积)
  7. 20155219 2016-2017-2 《Java程序设计》第4周学习总结
  8. linux rpm yum 安装 软件
  9. cvtColor()学习
  10. queue 的基本用法