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

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

花好夜猿 2020-10-24
751

该系列文章针对 Mybatis 3.5.1 版本

核心处理层完成的工作就是 SQL 的执行,整个操作流程由几个组件类组成,这几个组建类的组合执行逻辑图如下:


图片来自《Mybatis 技术内幕》


如上图,Executor
扮演入口的角色,Executor
主要做了缓存、SQL 执行准备等辅助操作。


真正开始执行 SQL 查询操作,由 StatementHandler
来处理。


StatementHandle
执行操作如下:


  • 构建 Statement
    对象

  • 通过 ParameterHandler
    结合 Statement
    拼接完整 SQL 语句

  • 通过 ResultSetHandler
    处理 Statement
    执行SQL 的结果集,将其映射成对应的 Java 对象


本章主要查看 StatementHandler
相关实现类,不同的 StatementHandler
也意味着构建的 Statement
实现类不同。


一、StatementHandler 相关实现



StatementHandle
实现类类图如下:


如上图所示,StatementHandler
实现类按照功能可以分为两大类


  • 有具体功能实现的类BaseStatementHandler
    PreparedStatementHandler
    SimpleStatementHandler
    CallableStatementHandler

  • 具有路由功能的类RoutingStatementHandler

RoutingStatementHandler
没有任何具体实现,只有在构造函数时的策略选择,根据用户需要的 StatementHandler
类型动态选择相关的 StatementHandler
实现类。

1.1、有具体功能实现的实现类

BaseStatementHandler
PreparedStatementHandler
SimpleStatementHandler
CallableStatementHandler


上述几个实现类类图结构,如下图

如图, BaseStatementHandler
PreparedStatementHandler
SimpleStatementHandler
CallableStatementHandler
的抽象父类。


1.1.1、BaseStatementHandler


BaseStatementHandler
是一个抽象父类,同时也是其子类的抽象模板,BaseStatementHandler
中模板方法为 BaseStatementHandler#prepare
,相关具体代码如下:

如上述代码,BaseStatementHandler#prepare
方法执行的操作分为两步:


  • 1、实例化相关的 Statement
    实现(由其子类实现)

  • 2、设置Statement相关配信息。

了解了模板方法StatementHandler#prepare
的执行流程后,需要重点关注的就是其子类关于实例化方法 BaseStatementHandler#instantiateStatement
的具体实现。


1.1.1.2、PreparedStatementHandler
SimpleStatementHandler
CallableStatementHandler

PreparedStatementHandler

SimpleStatementHandler

CallableStatementHandler
 这三个 StatementHandler
实现类都继承了抽象父类 BaseStatementHandler


PreparedStatementHandler

SimpleStatementHandler

CallableStatementHandler
 在实现上大同小异,区别在于其所构建的 Statement
对象不同。


SimpleStatementHandler
通过 Statement
进行 SQL 的处理


PreparedStatementHandler
通过 PreparedStatement
进行 SQL 的处理


CallableStatementHandler
通过 CallableStatement
进行 SQL 的处理。


1.2、RoutingStatementHandler

RoutingStatementHandler 并不构建 Statment
对象执行 SQL 操作。


RoutingStatementHandler
StatementHandler
实现类的选择器。


简单来看一下 RoutingStatementHandler
构造函数代码实现,

如上述代码,用户根据需要指定需要使用的 StatementHandler
实现类类型,RoutingStatementHandler
会根据用户选择,动态的选择相关的 StatementHandler
实现类,而不同的实现类意味着不同的 Statement
实现类。

End

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

评论