Mybatis源码窥探

作为当前主流的ORM框架—Mybatis, 其代码的质量是母庸置疑的,我们通过了解源码层面他的实现,便可以掌握和了解到许多软件开发的思想和代码编写准则

环境准备

  1. 我们可以通过github官网去下载他的源代码
    生活小妙招
    因为github的服务器在美国,通过国内dns服务器进行查找github.com的话比较费劲,所以我们对github的访问会比较卡,可以 通过在本地hosts文件写上github域名和IP地址的映射关系,从而不走国内的dns,提高我们的访问速度, 这是一个可以将域名转化为ip地址的网站IP转换,我们可以根据github及其各个子域名查找出对应的ip地址
    例如,我的host文件是这样的

    好了、收~,回归主题

  2. 假设我们目前已经可以流畅的访问github了,就可以愉快的下载mybatis的源代码了

    git clone https://github.com/mybatis/mybatis-3.git

唉,我还是一如既往的喜欢用图说话
BOJxmY.png](https://www.helloimg.com/image/BOJxmY)

  1. 下载好之后,我们切换分支,我使用的版本是mybatis3.5.6

    git checkout -b mybatis-3.5.6 mybatis-3.5.6
    切换完成之后,我们可以使用 git branch -vv 来查看是否切换成功

  2. 最后一步,我们使用我们的集成开发环境将源码倒入即可

代码结构

Mybatis整体的代码结构如下图所示
BOJEd9.png](https://www.helloimg.com/image/BOJEd9)

框架的整体结构

BOt3iq.png

基础支持层

基础支持层是整个mybatis框架的地基,为了整个Mybatis的框架提供了比较基础的功能,其中每一个模块都提供了一个内聚、单一的能力,Mybatis的基础支持层按照这些单一的能力可以分为上述的九个模块。

类型转换 : 别名机制、还有实现了JDBC类型和java类型之间的类型转换,这一点在ResultSetHandler 和 ParameterHandler中有较好的体现
日志模块 : 对我们的框架提供日志的支持,Mybatis中提供了日志模块来和出名的第三方的框架进行集成,比如说Log4j、Log4j2、slf4j等等
反射模块 : Java中的反射机制十分的强大,Myabtis的发射工具箱在java发射的基础之上进行的一层封装,提供了更好的效率和更加好用的api接口
Bingding模块 : 在Mybatis的使用过程中,往往我们不需要对进行Mapper文件进行实现,根据xml文件或者是Mapper接口中配置的注解,通过sqlsession便可以生成对应的代理,进行数据库的增删改查的操作
数据源模块 : 一个优秀的数据持久化框架中最必不可少的就是一个数据源模块,Mybatis本身便提供了自己身的数据源模块,并且对各个第三方的数据源模块提供了比较好的支持,可以随意使用
缓存模块 : 我们的绝大多数业务数据最终都是要落库的,所以,数据库性能的好坏直接影响到了我们的业务,听说过二八理论的同学应该都知道,我们日常操作中主要以读请求居多,在数据库的性能瓶颈的时候,引入缓存是一个非常好的解决方案,Mybatis本身框架自带了一级缓存和二级缓存,其具体实现就位于缓存模块之中。
解析器模块 : 我们使用过的同学都知道,Mybatis需要对各种各样的配置文件进行解析,其中主要是依赖Xpath实现xml文件和各种表达式的高效解析
事务管理模块 : 提供事务管理机制以控制数据库中的事务

核心处理层

顾名思义,核心处理层是mybatis的核心所在,其中涉及到了Myabatis的初始化流程,以及一条sql语句执行的全过程
BOAkVK.png](https://www.helloimg.com/image/BOAkVK)
Excutor调用事务管理模块实现事务的相关控制,还有一二级缓存的控制也归他管;sql语句真正的执行由StatementHandler执行,先使用ParameterHandler进行用户实参的绑定,然后通过java.sql.Statement对象发送到数据库中执行,拿到ResultSet,由ResultSetHandler将ResultSet转换为java对象返回给调用方

插件: 很多成熟的框架都会给开发者提供插件的功能,以让他实现额外的框架功能, 因为业务场景是复杂多变的,很多情况下原生的框架不足以满足各种各样的业务需求,可以针对这些场景实现一些插件来满足需求,这样框架才会有足够的生命力。

接口层

顾名思义,是Mybatis暴露给调用的接口集合,例如比较核心的sqlSession接口,你可以利用它获取mapper代理,执行sql语句,控制事务开关等等

以上就是Mybatis的核心架构,预知后事如何,请看下回。

猜你喜欢

转载自blog.csdn.net/weixin_44880685/article/details/113859248
今日推荐