脚本宝典收集整理的这篇文章主要介绍了Myabtis源码分析终篇-Mybatis是如何访问数据的?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
目录
一、 核心组件Executor 分析
1、Executor 介绍
2、Executor 设计模式
3、Executor 的三个重要组件
三、 结果集处理ResultHandler介绍
在上一篇文章中我们了解到,提到 Sqlsession 的功能都是基于 Executor 来实现的,Executor 是MyBaits 核心接口之一,定义了数据库操作最基本的方法,在其内部遵循 JDBC 规范完成对数据库的访问F1b;Executor 类继承机构如下图所示:
模板模式:一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定实现;类结构如下:
AbstractClass 中模板方法 template()定义了功能实现的多个步骤,抽象父类只会对其中几个通用的步骤有实现,而一些可定制化的步骤延迟到子类 concreteClass1、ConcreteClass2 中实现,子类只能定制某几个特定步骤的实现,而不能改变算法的结构;
应用场景:遇到由一系列步骤构成的过程需要执行,这个过程从高层次上看是相同的, 但是有些步骤的实现可能不同,这个时候就需要考虑用模板模式了;
MyBatis 的执 行器组件是 使用模板 模式的典型应 用, 其中 BaseExecutor 、BaseStatementHandler 是模板模式的最佳实践;BaseExecutor 执行器抽象类,实现了 executor 接口的大部分方法,主要提供了缓存管理和事务管理的能力,其他子类需要实现的抽象方法为:doUpdate,doQuery 等方法;在 BaseExecutor 中进行一次数据库查询操作的流程如下:
如上图所示,doQuery 方法是查询数据的结果的子步骤,doQuery 方法有 SIMPLE、REUSER、BATCH 三种实现,这三种不同的实现是在子类中定义的;
通过对 SimpleExecutor doQuery()方法的解读发现,Executor 是个指挥官,它在调度三个小弟工作,这三个小弟分别为:
Executor 三个组件内部运作流程如下图所示:
StatementHandler 完成 Mybatis 最核心的工作,也是 Executor 实现的基础;功能包括:创建statement 对象,为 sql 语句绑定参数,执行增删改查等 SQL 语句、将结果映射集进行转化; StatementHandler 的类继承关系如下图所示:
ResultSetHandler 将从数据库查询得到的结果按照映射配置文件的映射规则,映射成相应的结果集对象;在 ResultSetHandler 内部实际是做三个步骤:找到映射匹配规则 → 反射实例化目标对象 → 根据规则填充属性值,为完成这三部ResultHandler 内部调用的流程图如下:
至此,整个mybatis常用使用以及源码分析就全部介绍完了,希望大家看完之后有所了解,也欢迎大家和我沟通一起学习交流。
以上是脚本宝典为你收集整理的Myabtis源码分析终篇-Mybatis是如何访问数据的?全部内容,希望文章能够帮你解决Myabtis源码分析终篇-Mybatis是如何访问数据的?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。