MyBatis 的执行流程,写得太好了!

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

  • 1、Mapper接口和映射文件是如何进行绑定的
  • 2、MyBatis中SQL语句的执行流程
  • 3、自定义MyBatis中的参数设置处理器typeHandler
  • 4、自定义MyBatis中结果集处理器typeHandler

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

概要

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

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

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

获取Mapper接口(getMapper)

第二步是通过SqlSession对象是获取一个Mapper接口,这个流程还是相对简单的,下面就是我们调用session.getMapper方法之后的运行时序图:MyBatis 的执行流程,写得太好了!_第1张图片

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

MyBatis 的执行流程,写得太好了!_第2张图片

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

MyBatis 的执行流程,写得太好了!_第3张图片

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

MyBatis 的执行流程,写得太好了!_第4张图片

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

MyBatis 的执行流程,写得太好了!_第5张图片

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

你可能感兴趣的:(mybatis,前端,后端,数据库,服务器)