• mybatis源码阅读心得


     第一天阅读源码及创建时序图。(第一次用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

    结合设计模式理解

  • 相关阅读:
    exports 和 module.exports 的区别
    (转) 前端模块化:CommonJS,AMD,CMD,ES6
    使用原生的javascript来实现轮播图
    使用C3的一些新属性绘制谷歌浏览器的图标
    仿照jQuery进行一些简单的框架封装(欢迎指教~)
    canvas中的非零环绕原则
    利用canvas进行一个饼形图的绘制
    利用构造函数对canvas里面矩形与扇形的绘制进行一个封装
    利用canvas来绘制一个会动的图画,欢迎指教
    自己整理出来的一些用到的方法的封装,欢迎指教
  • 原文地址:https://www.cnblogs.com/zzt-lovelinlin/p/9295020.html
Copyright © 2020-2023  润新知