Mybatis构建阶段(1)

    MyBatis和其他组件一样,也需要通过初始化来准备运行时环境。在初始化阶段输入的是XML和字节码,输出结果是configuration对象。

一、关键类

    XMLConfigBuilder和XMLMapperBuilder这两个构建器是MyBatis构建阶段的核心。

    MyBatis构建阶段主要的产出结果和参与构建的构建器如下,它们互相协作,实现了整个MyBatis执行前的准备工作。

(1)SqlSessionFactory:管理数据库会话、整合configuration对象,是构建阶段的重要输出结果。

(2)SqlSessionFactoryBuilder:SqlSessionFactory的构造器,可以自己解析配置、也可以直接传入提前构建好的配置对象构建SqlSessionFactory。

(3)Configuration:存储所有MyBatis运行时的配置。

(4)BaseBuilder:构造器基类,处理configuration、typeAlias及typeHandler对象。

(5)XMLConfigBuilder:解析XML定义的configuration对象。

(6)XMLMapperBuilder:解析XML定义的SQL映射配置对象集合。

(7)MapperRegistry:configuration对象中的SQL映射配置对象的注册机。

(8)MapperAnnotationBuilder:解析注解定义的SQLMapper对象集合。

二、关键时序

    MyBatis构建阶段的调用入口类是SqlSessionFactoryBuilder,它会调用XMLConfigBuilder构建配置。XMLConfigBuilder会调用XMLMapperBuilder(以XML定义SQLMapper时)构建SQL Mapper映射。SqlSessionFactoryBuilder在得到初始化的configuration对象后用其构建SqlSessionFactory。

    SqlSessionFactory是生产SqlSession对象的工厂,SqlSession则是MyBatis执行阶段的关键入口类。

三、构建的入口:SqlSessionFactoryBuilder和SqlSessionFactory

    在SqlSessionFactoryBuilder中有很多重载的builder()方法,但核心方法有以下三种。

public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
    try {
      //初始化解析器
      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.
      }
    }
  }
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.
      }
    }
  }

    inputStream是配置文件的文件流,environment和properties是可选的参数。build()方法首先生成XMLConfigBuilder 对象,然后调用parse()方法将配置文件的文件流解析成configuration对象。

public SqlSessionFactory build(Configuration config) {
    return new DefaultSqlSessionFactory(config);
  }

   在configuration对象解析完成后使用configuration对象构建DefaultSqlSessionFactory对象。

四、conf.xml配置

    <environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<!-- 配置数据库连接信息 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.cj.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://127.0.0.1:3306/first?serverTimezone=UTC&amp;characterEncoding=utf8&amp;useUnicode=true&amp;useSSL=false" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>

    environments元素用于配置多数据源信息,并指定默认使用哪个数据源。

    SqlSessionFactoryBuilder.builder()方法中的第二个参数environment,它就是environment元素id属性的值,如果配置为空,则系统会使用默认的环境配置值"default"。

<databaseIdProvider type="DB_VENDOR">
		<property name="SQL Server" value="sqlserver"/>
		<property name="DB2" value="db2"/>
		<property name="Oracle" value="oracle"/>
</databaseIdProvider>

    databaseIdProvider 元素定义数据库厂商的id,在构建SQL Mapping时可以根据此配置区分数据库厂商。

<mappers>
		<!-- 注册bookMapper.xml文件-->
		<mapper resource="mapping/bookMapper.xml" />
	</mappers>

    mapperElement()方法构建SQL Mapper。从这个方法开始,构建过程进入第二阶段:SQL Mapper初始化阶段。

如果本文对您有很大的帮助,还请点赞关注一下。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游王子og

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值