mybatis3.2.x源码学习-2

1.上个文章总结

上个文章,我们看到了Mybatis是如何通过new SqlSessionFactoryBuild().build(redear);构造一个关键的configuration,其中底层又是分别由XmlConfiguationBuild,XmlMapperBuild,XmlStatementBuild来解析并构造相应的数据,封装进configuration配置类。接下来,让我们探寻下一个关键语句sqlSessionFactory.openSession();如何创建一个session会话的。

2.找一个源码上的demo

我们找到个这个测试类BaseTest(src\test\java\org\apache\ibatis\submitted\global_variables\BaseTest.java)
在这里插入图片描述

从sqlSessionFactory.openSession();这个方法一路往下点,选择这个实现类DefaultSqlSessionFactory,找到关键方法openSessionFromDataSource();

在这里插入图片描述

然后我们在网上也看了别人写的源码,所以知道,其中Excutor 执行器比较重要,是sql执行器,我们继续点进去看这个方法

在这里插入图片描述
关于 ExecutorType 有三种类型:

SIMPLE
REUSE
BATCH
详细解释参考: Mybatis中的ExecutorType
简单总结为:
SimpleExecutor 是一种常规执行器,每次执行都会创建一个statement,用完后关闭。
ReuseExecutor 是可重用执行器,将statement存入map中,操作map中的statement而不会重复创建statement。
BatchExecutor 是批处理型执行器,doUpdate预处理存储过程或批处理操作,doQuery提交并执行过程。
————————————————
版权声明:本文为CSDN博主「飞跃南墙的晓M」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30718137/article/details/122455652

3.翻一下session.getMapper(Mapper.class) 看看


在这里插入图片描述

点进去看看,我们会发现,这个是通过 configuration–>MapperRegistry–>MapperProxyFactory,最后创建一个代理类,如下:

在这里插入图片描述

3.通过MapperProxyFactory 创建的MapperProxy代理类

恭喜咱们,现在应该是找到核心调用方法了:
(找到具体代理类,就找到具体如何执行的方法)

在这里插入图片描述

4. MapperMethod 方法具体执行者

然后我们点进这个execute(sqlSession,arhs)的的具体方法执行进去看看,方法执行的源码就在这里

在这里插入图片描述

5. 选择一个Session的执行,进去看看具体如何实现


在这里插入图片描述

继续往下点,通过执行器executor.update(ms, wrapCollection(parameter));执行语句,选择BaseExecutor,基本的三种执行器 都是继承此类.,所以继续往下看;

6.底层是用StatementHandler 去处理要执行的语句,我们此时选择的是SimpleExecutor执行器


在这里插入图片描述

7.Mybatis 核心组件,总结

cv一下别人的总结,哈哈:


组件名 功能

Configuration Mybatis 所有的配置信息都维持在Configuration 对象之中

SqlSession 作为Mybatis 工作的主要顶层API,表示和数据库交互的会话,完成数据库增删查改功能

Executor Mybatis 执行器,是Mybatis 调度的核心,负责SQL

StatementHandler 封装了JDBC Statement 操作,负责对JDBC statement 的操作,如设置参数,将 Statement 结果集转换为List 集合

ParameterHandler 负责对用户传递的参数转换为JDBC Statement 所需要的参数

ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换为List 类型的集合

MappedStatement MappedStatement 维护了一条<select

MapperProxy,MapperProxyFactory Mapper 代理,使用原生的Proxy 执行mapper 里的方法


8.Mybatis 用到的设计模式

工厂模式::SqlSessionFactory、TransactionFactory、LogFactory
代理模式:MapperProxy、ConnectionLogger
策略模式:Executor(抽象类BaseExecutor的各种sql执行,对应的不同Executor实现的策略)
单例模式:ErrorContext、LogFactory

=====================================================================
mybatis3.2.x源码学习-1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值