本文介绍: mybatis 的 sql 执行操作方法在 SqlSession 中,SqlSession 是 mybatis 的执行入口XxxMapper 是一个接口,mybatis 基于 jdk 动态代理机制会生成一个代理对象,其 InvocationHandler(具体类为 MapperProxy)的 invoker(…) 方法会获取 mapper.xml 定义的 sql 并执行。
后面开始分析sql执行的源码流程
也就是这一部分
一、factory.openSession()
重点关注configuration.newExecutor这个方法,获取事务处理器比较简单,就是获取一个jdbc的事务管理器。
执行完成之后最后生成了一个DefaultSqlSession,有关DefaultSqlSession,特别要注意一点,它是一个非线程安全的类。
二、获取mapper接口
�
关于knownMappers前面讲过:是一个map,里面存放的是mapper的类型和MapperProxyFactory类。
后面就是调用mapperProxyFactory.newInstance(sqlSession)进行mapper接口的实例化。
最终会拿着mapper接口、代理方法缓存 生成InvokeHandler(用来生成Jdk代理必须要的类,当调用被代理的方法的时候,会调用到InvokeHandler的invokde方法)
最终返回的代理对象就是下图所示:
三、处理查询操作
四、总结
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。