mybatis 调用存储过程_MyBatis执行流程(一)Configuration和SqlSessionFactory对象的创建...

将根据下面的流程图分析Mybatis源码

a4010a2a03ea118d4b1cea960b00e84f.png

SqlSessionFactory对象的创建过程和Configuration对象的创建

  • 全局配置文件加载流程Resources是Mybatis的工具类主要用于加载配置文件的
InputStream 
  • 调用的是Resources静态方法getResourcresAssStream()方法它调用了重载的getResourcresAssStream()方法通过类加载器加载配置文件返回一个的字节流
public 
  • 重载的getResourcresAssStream()方法返回字节流文件
public 
  • 1.使用sqlSessionFactoryBuilder创建sqlSession
      • SqlSessionFactoryBuilder 该类是 SqlSessionFactory(会话工厂)的构建者类,之前描述的操作其实全是从这里面 开启的,首先就是调用 XMLConfigBuilder 类的构造器来创建一个 XML 配置构建器对象, 利用这个构建器对象来调用其解析方法 parse()来完成 Configuration 对象的创建,之后以这 个配置对象为参数调用会话工厂构建者类中的 build(Configuration config)方法来完成 SqlSessionFactory(会话工厂)对象的构建。
SqlSessionFactory 
  • 2.SqlSerssionFactoryBuilder调用build方法传入读取到的全局配置文件的流对象
public 
  • 3.调用重载的build方法
public 
  • 4.在XMLConfigBuilder对象的构造方法内同时调用父类的构造方法完成Configuration对象的创建,最后将创建好的XMLConfigBuilder对象返回到
      • XMLConfigBuilder 该类是 XML 配置构建者类,是用来通过 XML 配置文件来构建 Configuration 对象实例, 构建的过程就是解析 Configuration.xml 配置文件的过程,期间会将从配置文件中获取到的指 定标签的值逐个添加到之前创建好的默认 Configuration 对象实例中。
public 
  • 5.在创建完毕Configuration对象的实例后将进行了mybatis的文件的解析
public 
  • 在parse()方法内判断可以忽略主要的是parseConfigguration()方法此方法是解析xml文档的方法我们可以看
  • evalNode()方法传入的字符串是xml文档的根节点,那么很明显传入一个根节点创建一个Document对象
public 
  • 文档解析方法parseConfigguration()此方法是具体解析mybatis全局配置文件的文档的方法,此方法内的方法的作用主要是对Configuration对象进行赋值(Configuration对象映射的就是mybats的全局配置文件)
private 
  • 看源码就知道了文件的解析逻辑是很明了的逻辑不是很复杂,并且每个节点解析完后都要将解析后的值赋值给Configuration对象的就拿properties节点举例
private 
  • 到此Configuration配置文件核心对象已将创建完毕,再回到build()方法返回值是一个的SqlSessionFactory对象但是SqlSessionFactory是一个接口那么返回的肯定是实现类
  • OK看了返回的就是此对象DefaultSqlSessionFactory实现类对象,DefaultSqlSessionFactory对象接收的参数刚好是创建好已经构建好的Configuration对象到此SqlSessionFactory已将创建完毕
  • SqlsessionFactory 该 接 口 是 会 话 工 厂 , 是 用 来 生 产 会 话 的 工 厂 接 口 , DefaultSqlSessionFactory 是其实现类,是真正生产会话的工厂类,这个类的实例的生命周期 是全局的,它只会在首次调用时生成一个实例(单例模式),就一直存在直到服务器关闭。
public 
  • 结论
      • 1.Configuration 对象的创建优先于文件的解析
      • 2.SqlSessionFactory工厂对象返回的其实是其子类DefaultSqlSessionFactory对象
      • 3.DefaultSqlSessionFactory是全局唯一的

二)Configuration对象

  • 该对象是 Mybatis 的上下文对象,实例化这个类的目的就是为了使用其对象作为项目全 局配置对象,这样通过配置文件配置的信息可以保存在这个配置对象中,而这个配置对象在 创建好之后是保存在 JVM 的 Heap 内存中的,方便随时读取。不然每次需要配置信息的时 候都要临时从磁盘配置文件中获取,代码复用性差的同时,也不利于开发。
  • 此对象的主要作用就是存储配置文件的信息,和初始化的相关的信息的,并且Configuration作为全局上下文只有一个实例
  • 简单看下源码提几个的需要知道的
      • 1.使用聚合的方式将其他的节点聚合到了Configuration对象内如下几个
protected 
  • 2.Configuration的构造方法
  • 给很多的属性起了别名这也是为什么可以使用JDBC/MANAGED等名称控制事务的原因
public 

三)DefaultSqlSessionFactory

  • DefaultSqlSessionFactory是SqlsessionFactory 该接口是会话工厂,是用来生产会话的工厂接 口 , DefaultSqlSessionFactory 是其实现类,是真正生产会话的工厂类,这个类的实例的生命周期 是全局的,它只会在首次调用时生成一个实例(单例模式),就一直存在直到服务器关闭。
      • 看下DefaultSqlSessionFactory是怎么创建SqlSession对象的呢?
      • 1.SqlSession是一个的接口那么创建SqlSession对象的必定是SqlSession接口的实现类
public 
  • 2.SqlSessionFactory接口内的方法
      • 看到SqlSessionFactory内的openSession()方法很熟悉吧
public 
  • 3.DefaultSqlSessionFactory内的方法
private 
  • 4.openSessionFromDataSource()方法就是构件了默认的SqlSession对象
private 
  • 5.默认的DefaultSqlSession
      • 实现了接口SqlSession接口并且实现了相关的方法
      • 设置了基本的连接参数
      • SqlSession接口内封装了常见的对数据库的操作,增删改查操作
public 
  • 到此SqlSession对象创建完毕,其实我们使用的是默认的DefaultSqlSession对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值