整体架构

version-3.5.5

在深入了解Mybatis的源码之前,我们先了解一下Mybatis的整体架构和工作原理,这样有助于我们在阅读源码过程中了解思路和流程。

核心流程

在上一遍的入门程序中,我们通过示例代码简单的介绍了如何通过Myabtis进行一个简单的增删改查,并用简单的步骤描述了示例程序的运行过程。为了更直观,其工作原理可理解成如下步骤:

  • 初始化阶段:读取XML配置文件和注解中的配置信息,创建配置对象,并完成各个模块的初始化的工作
  • 代理阶段:封装iBatis的编程模型,使用mapper接口开发的初始化工作
  • 数据读写阶段:数据读写阶段:通过SqlSession完成SQL的解析,参数的映射、SQL的执行、结果的解析过程

整体架构

我们从工作原理图中也能看到架构的影子。这是一个Mybatis的逻辑划分架构图,可以分成三层

  • 接口层:通SqlSession类提供对数据库访问能力,隐藏了后续复杂的处理逻辑。
  • 核心处理层:主要负责执行SQL,并返回结果
  • 基础支持层:对一些基础功能进行封装,为核心处理层提供服务。

代码结构

Mybatis的工程结构非常的清晰,基本上通过报名就可以了解到该模块的功能使用场景,能非常迅速的帮我们定位代码和了解功能。

  1. annotations:注解配置
  2. binding:绑定、代理 提供 Mapper 接口与 XML 映射文件进行关联的支持
  3. builder:构建、配置解析
  4. cache:缓存
  5. cursor:游标
  6. datasource:数据源
  7. exceptions:异常(基本上每个包下都有自己的自定义异常)
  8. executor: SQL执行器
  9. io:资源加载
  10. jdbc:jdbc操作
  11. lang:语言 UsesJava7、UsesJava8
  12. logging:日志支持
  13. mapping:映射参数、结果、SQL
  14. parsing:解析器 XPath、Token解析
  15. plugin:插件支持
  16. reflection:反射功能封装
  17. scripting:脚本
  18. session: 会话
  19. transaction:事务
  20. type:类型 jdbcType,javaType互转
  21. util:工具包

设计模式

源码中使用了很多的设计模式

  • SqlSession使用门面模式
  • 日志模块使用了适配器模式
  • 数据源模块使用工厂模式
  • 数据连接池使用策略模式
  • 缓存模块使用了装饰器模式
  • Executor模块使用了模板方法模式
  • Builder模块使用了建造者模式
  • Mapper接口使用了代理模式
  • 插件模块使用责任链模式

总结

总的来说,Mybatis的代码还算比较好理解的,相对简单易懂。在了解JDBC的操作原理后,在结合Mybatis的运行原理,就能大致了解其工作流程了。后续我们将一步一步尽心分析!

【Mybatis源码解析】- 整体架构及原理的更多相关文章

  1. MyBatis 源码篇-整体架构

    MyBatis 的整体架构分为三层, 分别是基础支持层.核心处理层和接口层,如下图所示. 基础支持层 反射模块 该模块对 Java 原生的反射进行了良好的封装,提供了更加简洁易用的 API ,方便上层 ...

  2. 精尽 MyBatis 源码分析 - 整体架构

    该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...

  3. mybatis源码解析之架构理解

    mybatis是一个非常优秀的开源orm框架,在大型的互联网公司,基本上都会用到,而像程序员的圣地-阿里虽然用的是自己开发的一套框架,但其核心思想也无外乎这些,因此,去一些大型互联网公司面试的时候,总 ...

  4. jmh源码解析-整体架构

    我理解的jmh运行架构图 生成字节码,字节码负责维护测试的状态和调用被测试的方法 默认在fork的进程中进行测试,可以配置多个fork进程,以减少误差 通过线程池,提交每个迭代的测试任务,任务执行后, ...

  5. Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码

    在文章:Mybatis源码解析,一步一步从浅入深(一):创建准备工程,中我们为了解析mybatis源码创建了一个mybatis的简单工程(源码已上传github,链接在文章末尾),并实现了一个查询功能 ...

  6. Mybatis源码解析(一) —— mybatis与Spring是如何整合的?

    Mybatis源码解析(一) -- mybatis与Spring是如何整合的?   从大学开始接触mybatis到现在差不多快3年了吧,最近寻思着使用3年了,我却还不清楚其内部实现细节,比如: 它是如 ...

  7. Mybatis源码解析3——核心类SqlSessionFactory,看完我悟了

    这是昨晚的武汉,晚上九点钟拍的,疫情又一次来袭,曾经熙熙攘攘的夜市也变得冷冷清清,但比前几周要好很多了.希望大家都能保护好自己,保护好身边的人,生活不可能像你想象的那么好,但也不会像你想象的那么糟. ...

  8. 【MyBatis源码解析】MyBatis一二级缓存

    MyBatis缓存 我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级),尤其是对于一些相 ...

  9. Mybatis源码解析-DynamicSqlSource和RawSqlSource的区别

    XMLLanguageDriver是ibatis的默认解析sql节点帮助类,其中的方法其会调用生成DynamicSqlSource和RawSqlSource这两个帮助类,本文将对此作下简单的简析 应用 ...

  10. mybatis源码-解析配置文件(四-1)之配置文件Mapper解析(cache)

    目录 1. 简介 2. 解析 3 StrictMap 3.1 区别HashMap:键必须为String 3.2 区别HashMap:多了成员变量 name 3.3 区别HashMap:key 的处理多 ...

随机推荐

  1. 《Selenium自动化测试实战:基于Python》之 Python与Selenium环境的搭建

    第2章  Python与Selenium环境的搭建 购买链接:  京东:https://item.jd.com/13123910.html  当当:http://product.dangdang.co ...

  2. P1048_采药(JAVA语言)

    思路:动态规划的背包问题.把时间看作重量,转换为01背包问题求解. 题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出 ...

  3. Web实验报告

  4. 在 .NET Core 中使用 ViewConfig 调试配置

    介绍 .NET Core 中的配置包含了多个配置提供程序,包括了 appsettings.json,环境变量,命令行参数等,还有一些扩展的自定义提供程序,比如说 ApolloConfig,AgileC ...

  5. 14、运行Django时浏览器中遇到Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'deny'

    问题:Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'deny' 解决办法: 只需要在 Djagno ...

  6. TypeError: 'list' object cannot be interpreted as an integer Python常见错误

    想要通过索引来迭代一个list或者string的元素, 这需要调用 range() 函数.要记得返回len 值而不是返回这个列表.

  7. 201871030127-王明强 实验二 个人项目—《D{0-1}背包问题 》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)详细阅读<构建之法>学习并掌握PSP的具体流程(2)掌握背包问题,通过查阅相关资料,设计一个采用 ...

  8. 201871030110-何飞 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030110-何飞 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 ...

  9. vite 动态 import 引入打包报错解决方案

    关注公众号: 微信搜索 前端工具人 ; 收货更多的干货 原文链接: 自己掘金文章 https://juejin.cn/post/6951557699079569422/ 关注公众号: 微信搜索 前端工 ...

  10. 2018年block3学习计划

    还是要给自己制定一个block的计划,希望自己的技术能有更进一步的提升 1. 算法/数学 随着学习的进一步深入,愈发认识到了算法的重要性,这个block给自己定下的计划就是 1)把introducti ...