Mybatis运行原理(带你三步走)

本文详述MyBatis的运行原理,分为初始化、代理和数据读写三步骤。介绍如何通过SqlSessionFactory构建实例,解析配置文件,利用动态代理执行数据库操作,以及SQL解析、参数映射和结果封装的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis运行原理(带你三步走)

官网地址:http://www.mybatis.org/mybatis-3/zh/getting-started.html

第一步:初始化阶段,解析并加载到Configuration实例中。

  • 读取xml配置文件和注解中的配置信息,创建配置对象,并完成各个模块的初始化工作。

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。

源码解读入口:

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

其中:
XMLConfigBuilder:解析mybatis-config.xml文件。
XMLMapperBuilder:解析所有的*mapper.xml文件。
XMLStatementBuilder:解析SQL语句(select|insert|update|delete)。

以上解析的文件均加载到Configuration实例中。

第二步:代理阶段
使用jdk动态代理,封装IBatis编程模型,找到访问数据库时对应的方法及传参

  • 创建SqlSession响应请求
  • 动态代理封装iBatis的编程模型
  • 使用mapper接口访问数据库

源码解析入口:

SqlSession session = sqlSessionFactory.openSession();
try {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  Blog blog = mapper.selectBlog(101);
} finally {
  session.close();
}

翻译过程:

在这里插入图片描述

找到session中对应的方法执行 <<<----- MapperMethod.SqlCommand.type + MapperMethod.MethodSignature.returnType
找到命名空间和方法名 <<<----- MapperMethod.SqlCommand.name
传递参数 <<<----- MapperMethod.MethodSignature.convertArgsToSqlCommandParam

第三步:数据读写阶段
遵循jdbc规范,通过SqlSession完成SQL的解析,参数的映射,SQL的执行、结果的解析过程。
Mybatis的四大对象:
Executor:通过对SimpleExecutor doQuery()方法的解读发现,Executor是调度器。
StatementHandler:它的作用是使用数据库的Statement或PrepareStatement执行操作,起承上启下作用。
ParameterHandler:对预编译的SQL语句进行参数设置。
ResultSetHandler:对数据库返回的结果集(ResultSet)进行封装,返回用户指定的实体类型。

TransactionalCache:二级缓存
PerpetualCache:一级缓存
注:数据查询时,先从二级缓存取数据,若取不到则再从一级缓存中取数据(这是MySQL规定),若一级缓存中再获取不到,则从数据库中取数据。

Executor内部运作过程:
在这里插入图片描述

以上只是梳理Mybatis大致处理流程,像Mybatis缓存机制等还未整理,后期会补上这块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值