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