MyBatis的SQL执行流程,逻辑超清晰,总结得也太全了吧!

本文详细解析了MyBatis的SQL执行流程,包括Mapper接口与映射文件的关联、SQL执行流程、参数映射及结果集映射。通过工作流程图,清晰展示了MyBatis如何将Mapper接口与XML映射文件绑定,以及自定义typeHandler的过程。
摘要由CSDN通过智能技术生成

前言

MyBatis可能很多人都一直在用,但是MyBatis的SQL执行流程可能并不是所有人都清楚了,那么既然进来了,通读本文你将收获如下:

  • 1、Mapper接口和映射文件是如何进行绑定的

  • 2、MyBatis中SQL语句的执行流程

  • 3、自定义MyBatis中的参数设置处理器typeHandler

  • 4、自定义MyBatis中结果集处理器typeHandler

福利:MyBatis学习笔记与源码分析

PS:本文基于MyBatis3.5.5版本源码

概要

在MyBatis中,利用编程式进行数据查询,主要就是下面几行代码:

SqlSession session = sqlSessionFactory.openSession();UserMapper 
userMapper = session.getMapper(UserMapper.class);List<LwUser> user
List = userMapper.listUserByUserName("孤狼1号");

第一行是获取一个SqlSession对象在上一篇文章分析过了,第二行就是获取UserMapper接口,第三行一行代码就实现了整个查询语句的流程,接下来我们就来仔细分析一下第二和第三步。

获取Mapper接口(getMapper)

第二步是通过SqlSession对象是获取一个Mapper接口,这个流程还是相对简单的,下面就是我们调用session.getMapper方法之后的运行时序图:

图片

  • 1、在调用getMapper之后,会去Configuration对象中获取Mapper对象,因为在项目启动的时候就会把Mapper接口加载并解析存储到Configuration对象

图片

  • 2、通过Configuration对象中的MapperRegistry对象属性,继续调用getMapper方法

图片

  • 3、根据type类型,从MapperRegistry对象中的knownMappers获取到当前类型对应的代理工厂类,然后通过代理工厂类生成对应Mapper的代理类

图片

  • 4、最终获取到我们接口对应的代理类MapperProxy对象

图片

而MapperProxy可以看到实现了InvocationHandler,使用的就是JDK动态代理。

图片

至此获取Mapper流程结束了,那么就有一个问题了MapperRegistry对象内的HashMap属性knownMappers中的数据是什么时候存进去的呢?

Mapper接口和映射文件是何时关联的

Mapper接口及其映射文件是在加载mybatis-config配置文件的时候存储进去的,下面就是时序图:

图片

  • 1、首先我们会手动调用SqlSessionFactoryBuilder方法中的build()方法:

图片

  • 2、然后会构造一个XMLConfigBuilder对象,并调用其parse方法:

图片

  • 3、然后会继续调用自己的parseConfiguration来解析配置文件,这里面就会分别去解析全局配置文件的顶级节点,其他的我们先不看,我们直接看最后解析mappers节点

图片

  • 4、继续调用自己的mappe
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北游学Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值