暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[Mybatis]-[核心处理层]-ParameterHandler

花好夜猿 2020-10-24
619


该系列文章针对 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

文章转载自花好夜猿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论