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动静代理。