
该系列文章针对 Mybatis 3.5.1 版本
核心处理层完成的工作就是 SQL 的执行,整个操作流程由几个组件类组成,这几个组建类的组合执行逻辑图如下:
图片来自《Mybatis 技术内幕》

如上图,Executor
扮演入口的角色,Executor
主要做了缓存、SQL 执行准备等辅助操作。
真正开始执行 SQL 查询操作,由 StatementHandler
来处理。
StatementHandle
执行操作如下:
构建
Statement
对象通过
ParameterHandler
结合Statement
拼接完整 SQL 语句通过
ResultSetHandler
处理Statement
执行SQL 的结果集,将其映射成对应的 Java 对象
本章关注完整 SQL 拼接的实现类 ParameterHandler
ParameterHandler
ParameterHandler
实现类类图如下:

如图,ParameterHandler
默认只有一个实现类 DefaultParameterHandler
DefaultParameterHandler
功能
DefaultParameterHandler
功能就是对 SQL 中的占位符参数进行设值。使得 Statement
中对应的 SQL 语句称为可执行的完整语句。
相关占位符设值逻辑在DefaultParameterHandler#setParameters
中,相关代码如下:

如上述代码,代码逻辑关键在 TypeHandler#setParameter
中 ,而该方法最终会调用PreparedStatement#setXXX
方法进行参数设置。
比如对于字符串来说,会使用 PreparedStatement#setString(int parameterIndex, String x)
进行设值。
这边再来回顾一下 JDBC 原生 API 使用 PrepareStatement
进行SQL执行的操作。
以根据id查询用户信息为例,相关代码逻辑如下:

对比上述代码 DefaultParameterHandler#setParameters
需要完成的操作就是上述代码中第三步,进行 SQL 参数的设值。
略有不同的是,DefaultParameterHandler
通过定好的规则借助程序批量进行设置。
具体细节实现,自行Debug,自行查阅代码
End




