Mybatis源码分析一Configuration初始化以及SqlSession的创建过程

mybatis实际上就是对jdbcTemplate封装,将其 开辟连接 事务管理
sql执行 pojo返回 连接关闭 这些功能做了封装,让其更加方便

简述mybatis的执行流程:

1.读取mybatis.config.xml配置文件
2.将配置文件解析为Configuration对象
3.通过SqlSessionFactoryBuilder().build将Configuration对象注入SqlSessionFactory,获取SqlSessionFactory对象
4.通过SqlSessionFactory的openSession方法获取SqlSession对象
5.调用API通过执行器Executor执行并将处理好的结果返回

实际上就这这些东西,下面就将这些流程分析一下

1.读取配置文件将其解析为Configuration对象

  1. 通过读取本地配置文件Resources.getResourceAsStream(“mybatis-config.xml”)方法,将配置文件信息读取为一个输入流,并将其注入到SqlSessionFactoryBuilder.build(is)去解析
    下面就使用debug去走一下这个流程,请添加图片描述
    可以清楚的看到配置文件被读取为一个BufferedInputStream流请添加图片描述
    build方法是有多个重载方法的,最终调用的实际上是下面这个方法
    请添加图片描述

请添加图片描述
这个实际上就是在初始化一些对象,东西很多都是能用到的,我也没有仔细研究过。this.build(parser.parse())这个方法才是实际上赋值的方法
请添加图片描述
接下来就是赋值的具体流程了,请添加图片描述
这里配置很多对象,这里简述一下别名映射和处理mapper

别名映射注入流程

这些别名映射就是你在mapper.xml文件当中配置的

请添加图片描述
请添加图片描述
我们使用的时候还有许多例如string,int这些信息不需要我们配置就可以直接使用,这些真的不需要配置吗?请添加图片描述
上面可以看出别名映射的信息实际上是通过一个map储存的,那么就让我们打开查看一下其中的信息请添加图片描述
这就是别名映射的注入流程

mapper注入全流程

mapper当中的<select<insert这些标签最终会被解析为一个mappedstatement对象,使用map的方式将其储存在configuration对象当中,每一条语句都会解析为两个mappedstatement对象,key值为其命名空间加标签id或者标签id
请添加图片描述
请添加图片描述
请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述这里肯定会思考sql语句储存在什么地方,实际上是储存在sqlsource当中请添加图片描述
大概流程就是这样,值得注意的是二级缓存如果打开后,每个标签是可以配置的,其中有一个缓存刷新只有select标签默认是关闭的,其他标签是打开的,mappedstatement也会将这些信息储存起来。

2.传递Configuration对象最终构建SqlSession对象

1.构建SqlSessionFactory
请添加图片描述
2.构建SqlSession
请添加图片描述
请添加图片描述
请添加图片描述

3.调用方法简述,具体的流程下一波再讲

请添加图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值