废话不多说,直接进入文章。
我们在使用MyBatis的时候,会在xml中编写sql语句。如图:
那么,MyBatis底层是如何构造sql,写了接口为啥就能执行sql?
下面带着这个疑问我们一步步分析。
梳理MyBatis的设计思路
- 创建SqlSessionFactory实例
- 实例化过程中,加载配置文件创建configuration对象
- 通过factory创建SqlSession
- 通过SqlSession获取mapper接口动态代理
- 动态代理回调sqlsession中某查询方法
- SqlSession将查询方法转发给Executor
- Executor基于JDBC访问数据库获取数据
- Executor通过反射将数据转换成POJO并返回;给SqlSession
- 将数据返回给调用者
MyBatis三大核心阶段
- 初始化阶段:读取XML配置文件和注解中的配置信息,创建解析对象,并完成各个模块的初始化工作。就是把我们的配置文件加载到内存里面去。在sqlSession初始化的时候加载到内存中去的。
- 代理阶段:封装iBatis的编程模型,使用mapper接口开发的初始化工作;
- 数据读写阶段:通过SqlSession完成SQL的解析,参数的映射,SQL的执行,结果的反射解析过程。