zoukankan      html  css  js  c++  java
  • 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

    结合设计模式理解

  • 相关阅读:
    list转map,set,使用stream进行转化
    使用thymeleaf模板实现博客评论的异步刷新
    python 字典元组集合字符串
    python列表解析补充:
    python列表解析
    springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据
    配置github——每次提交后使contributions有记录(有小绿格子)
    github浏览器无法访问,并且idea无法push项目
    互联网协议入门
    http协议入门---转载
  • 原文地址:https://www.cnblogs.com/zzt-lovelinlin/p/9295020.html
Copyright © 2011-2022 走看看