Mybatis-运行原理

SqlSessionFactory初始化

image-20210513224221503

总结

把配置文件的信息解析并保存在Congratulation对象中,返回包含了Configuration的DefauConfiguration

MapperStatement:代表一个增删改查的详细信息

详细步骤

创建SqlSessionFactoryBuilder对象,调用build方法

image-20210513222734101

创建解析器parser,用解析器把每一个标签详细信息保存在Congratulation中

image-20210513222918599

image-20210513222929393

解析setting.xml

image-20210513220246462

解析mapper.xml

mapper.xml中的每一个元素信息解析出来并保存在全局配置中将增删改查标签的每一个标签属性都解析出来封装成一个MapperStatement,一个MapperStatement就代表一个增删改查的详细信息

image-20210513223023582

image-20210513221057031

image-20210513221555649

返回Configuration对象

image-20210513223214068

调用build方法创建DefaultConfiguration,DefaultConfiguration包含了保存全局配置信息的Configuration

image-20210513223348242

openSession获取SqlSession对象

返回一个DefaultConfiguration对象,包含了Configuration和Executor,Executor会在此被创建

image-20210513225133640

详细步骤

image-20210513225338324

image-20210513224449661

构建Executor执行器

image-20210513224536951

image-20210513225544080

将原生执行器封装成缓存执行器

image-20210513225612156

通过插件拦截器链实现所有插件

image-20210513225642973

返回包含了Configuration和Executor的DefaultConfiguration对象

image-20210513225909999

GetMapper获取到接口的代理对象

返回一个MapperProxy类型的代理对象

image-20210513231004847

详细步骤

调用getMapper方法

image-20210513231127238

image-20210513231133219

创建MapperProxy代理对象

image-20210513231147056

返回MapperProxy的代理对象

image-20210513231212016

image-20210513231236909

查询实现

image-20210514155119884

MapperProxy使用代理对象使用invoke方法调用MapperMethod传入会话和参数

image-20210514160806896

image-20210514160837289

image-20210514161154202

查询多个就调用executeMany()单个查询selectOne

image-20210514161253666

调用Executor的query方法

image-20210514161426297

wrapToMapIfCollection封装复杂类型到参数map集合

image-20210514161628650

query会获取到BoundSql和CacheKey

image-20210514161722032

BoundSql是包含了这个sql的所有详细信息(包含了sql语句 参数 类型等等 )

image-20210514161755849

CacheKey包含了缓存的信息,key值是:方法+id+参数xxx生成

image-20210514162012665

如下二个缓存的获取方法也证明了,如果mabits开启了缓存,会先调用CacheExecutor的query获取以名称空间为范围的二级缓存,如果没有就会调用BasicExecutor的query方法获取以session为范围的一级缓存,如果没有找到缓存 才会调用queryFromDatabase查询数据库

image-20210514162402844

image-20210514162555859

image-20210514162908298

image-20210514163108501

创建StatementHandler对象

image-20210514163145304

image-20210514163201305

image-20210514163339074

创建StatementHandler对象的同时分别创建出parameterHandler和resultSetHandler

image-20210514163950031

image-20210514164103044

调用prepareStatement方法创建原生JDBCStatement对象

image-20210514163534752

image-20210514164353503

返回list后续连接关闭

image-20210514165532170

image-20210514165706346

Mybatis运行原理总结

  1. 通过加载mybatis全局配置文件以及mapper映射文件初始化configuration对象 和Executor对象(通过全局配置文件中的defaultExecutorType初始化);
  2. 创建一个defaultSqlSession对象,将configuration对象和Executor对象注入给defaulSqlSession对象中;
  3. defaulSqlSession通过getMapper()获取mapper接口的代理对象mapperProxy(mapperProxy中包含defaultSQLSession对象)
  4. 执行增删改查
    1. 通过defaulSqlSession中的属性Executor创建statementHandler对象;
    2. 创建statementHandler对象的同时也创建parameterHandler和resultSetHandler;
    3. 通过parameterHandler设置预编译参数及参数值;
    4. 调用statementHandler执行增删改查;
    5. 通过resultsetHandler封装查询结果
  • 25
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值