Mybatis源码[01.SqlSessionFactoryBuilder]
admin
2023-05-11 11:41:50
0

可以说每个MyBatis都是以一个SqlSessionFactory实例为中心的。SqlSessionFactory实例可以通过SqlSessionFactoryBuilder来构建。一是可以通过XML配置文件的方式来构建SqlSessionFactory,二是可以通过Java API的方式来构建。但不管通过什么方式都有一个Configuration贯穿始终,各种配置正是通过Configuration实例来完成实现。

public class SqlSessionFactoryBuilder {

  // (1) 从配置文件获取SqlSessionFactory
  public SqlSessionFactory build(Reader reader) {
    return build(reader, null, null);
  }

  // (2) 从配置文件获取SqlSessionFactory,并设定依赖哪种环境参数(开发环境/生产环境)
  public SqlSessionFactory build(Reader reader, String environment) {
    return build(reader, environment, null);
  }

  // (3) 从配置文件获取SqlSessionFactory,并设定依赖哪些配置参数(属性配置文件,那些属性可以用${propName}语法形式多次用在配置文件中)
  public SqlSessionFactory build(Reader reader, Properties properties) {
    return build(reader, null, properties);
  }

  // 通用构建函数-:(1)、(2)、(3)构建函数内部实现均调用的此函数
  public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
    try {
      //委托XMLConfigBuilder来解析xml文件,并返回一个Configuration对象,SqlSessionFactory的生成依赖于此Configuration对象
      XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
      return build(parser.parse());
    } catch (Exception e) {
      throw ExceptionFactory.wrapException("Error building SqlSession.", e);
    } finally {
      ErrorContext.instance().reset();
      try {
        reader.close();
      } catch (IOException e) {
        // Intentionally ignore. Prefer previous error.
      }
    }
  }

  // (4) 从数据流中获取SqlSessionFactory
  public SqlSessionFactory build(InputStream inputStream) {
    return build(inputStream, null, null);
  }

  // (5) 从数据流中获取SqlSessionFactory,并设定依赖哪种环境参数(开发环境/生产环境)
  public SqlSessionFactory build(InputStream inputStream, String environment) {
    return build(inputStream, environment, null);
  }

  // (6) 从数据流中获取SqlSessionFactory,并设定依赖哪些配置参数(属性配置文件,那些属性可以用${propName}语法形式多次用在配置文件中)
  public SqlSessionFactory build(InputStream inputStream, Properties properties) {
    return build(inputStream, null, properties);
  }

  // 通用构建函数二:(4)、(5)、(6)构建函数内部实现均调用此函数
  public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
    try {
      XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
      return build(parser.parse());
    } 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.
      }
    }
  }

  // 通用构建函数一和通用构建函数二最终调用此函数,将XMLConfigBuilder 产生的Configuration作为参数,并返回DefaultSqlSessionFactory对象
  public SqlSessionFactory build(Configuration config) {
    return new DefaultSqlSessionFactory(config);
  }

}

相关内容

热门资讯

国际最强!“九章四号”研制成功... 记者 吴长锋 记者13日从中国科学技术大学获悉,该校潘建伟、陆朝阳、张强、刘乃乐等学者联合国内研究单...
在“影视泥土”里激活学生“工程... 在“影视文化名城”的金华东阳,生成式人工智能正深刻重塑影视内容生产方式。扎根于横店影视文化产业生态圈...
实拍马斯克与小儿子X出现在人民... 5月14日,凤凰卫视记者在人民大会堂采访到特斯拉创始人马斯克。
vivo手机用户注意啦!你们的... vivo手机用户注意啦!你们的系统要来一波实用更新了!这次OriginOS 6的五月升级,最给力的就...
定位千元级!汉王录写本M6发布... 5月13日,汉王科技正式发布录写本M6。6英寸机身,厚度6.8毫米,录音、手写、阅读三合一,官方给它...
彻底反超!比亚迪干掉特斯拉:登... 快科技5月14日消息,据报道,2025年,比亚迪超越特斯拉,成为全球最大电池储能系统(BESS)集成...
还原“造神”真相:算法不是开关... (文/刘媛媛 编辑/周远方)这几年,出现了一个很神奇的现象:每隔一段时间,就会有一个普通人突然站上流...
感染专家:安第斯病毒与新冠病毒... 澎湃新闻记者 陈斯斯 邹桥 孙瑞近日,荷兰籍极地探险邮轮“洪迪厄斯”号(MV Hondius)暴发汉...
河南一企业每月给员工父母发“工... 近日,河南一企业每月1日给员工父母发“工资”一事在网上引热议,很多人点赞,更多也是好奇:咋发?发多少...
“90后夫妻同患罕见病瘫痪”引... 近日,一段“90后新婚夫妻同患罕见病瘫痪”的视频在网上流传,引发关注和热议。有网友对夫妻俩的遭遇表示...