MyBatis源码解读(1)----SqlSession 的创建过程

一、SqlSessionFactoryBuilder

1、通过字符流的方式创建 SqlSessionFactory 。

         

2、通过字节流(InputStream)的方式构件 SqlSessionFacotry。

3、通过Configuration对象构建SqlSessionFactory。

总结:不管是字符流方式创建还是字节流的方式创建, 最终都会调用Configuration对象构建SqlSessionFactory。也就是第3种方式。我们发现调用的不是SqlSessionFactory,而是DefaultSqlSessionFactory 。这是为什么呢? 最终发现SqlSessionFactory是一个接口,它有两个实现类一个是DefaultSqlSessionFactory,另一个是SqlSessionManager。

根据上述接口可知,SqlSessionFactory提供了根据字节流、字符流以及直接使用org.apache.ibatis.session.Configuration配置类三种途径的读取配置信息方式,无论是字符流还是字节流方式,首先都是将XML配置文件构建为Configuration配置类,然后将Configuration设置到SqlSessionFactory默认实现DefaultSqlSessionFactory的configurationz字段并返回。所以,它本身很简单,解析配置文件的关键逻辑都委托给XMLConfigBuilder了,我们以字符流也就是java.io.Reader为例进行分析,SqlSessionFactoryBuilder使用了XMLConfigBuilder作为解析器。

二、DefaultSqlSessionFactory

下面来看 SqlSessionFactory 的实现类 DefaultSqlSessionFactory。

1、SqlSessionFactory 接口中的方法。

2.DefaultSqlSessionFactory 类中从数据源获取SqlSession 。

从Connection中获取SqlSession 。

总结:不管是从数据源中获取SqlSession 还是从 connection 中获取,最后都会调用 DefaultSqlSession 类来执行创建。那么为什么是DefaultSqlSession 而不是 SqlSession 类呢?因为SqlSession 是一个接口,DefaultSqlSession 实现了SqlSession 接口。

三、DefaultSqlSession 

下面来看 SqlSession 的实现类 DefaultSqlSession。

1、先来看SqlSession 中的方法,SqlSession 是执行器。

2、DefaultSqlSession 中的方法。

总结:通过sqlSession调用 相应的方法就可以执行 crud 操作了。到此 sqlSession 的创建过程就结束了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值