乐趣区

关于mybatis: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<LwUser> userList = 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 动静代理。

退出移动版