网站首页 > java教程 正文
version-3.5.5
在深入了解Mybatis的源码之前,我们先了解一下Mybatis的整体架构和工作原理,这样有助于我们在阅读源码过程中了解思路和流程。
核心流程
在上一遍的入门程序中,我们通过示例代码简单的介绍了如何通过Myabtis进行一个简单的增删改查,并用简单的步骤描述了示例程序的运行过程。为了更直观,其工作原理可理解成如下步骤:
- 初始化阶段:读取XML配置文件和注解中的配置信息,创建配置对象,并完成各个模块的初始化的工作
- 代理阶段:封装iBatis的编程模型,使用mapper接口开发的初始化工作
- 数据读写阶段:数据读写阶段:通过SqlSession完成SQL的解析,参数的映射、SQL的执行、结果的解析过程
整体架构
我们从工作原理图中也能看到架构的影子。这是一个Mybatis的逻辑划分架构图,可以分成三层
- 接口层:通SqlSession类提供对数据库访问能力,隐藏了后续复杂的处理逻辑。
- 核心处理层:主要负责执行SQL,并返回结果
- 基础支持层:对一些基础功能进行封装,为核心处理层提供服务。
代码结构
Mybatis的工程结构非常的清晰,基本上通过报名就可以了解到该模块的功能使用场景,能非常迅速的帮我们定位代码和了解功能。
- annotations:注解配置
- binding:绑定、代理 提供 Mapper 接口与 XML 映射文件进行关联的支持
- builder:构建、配置解析
- cache:缓存
- cursor:游标
- datasource:数据源
- exceptions:异常(基本上每个包下都有自己的自定义异常)
- executor: SQL执行器
- io:资源加载
- jdbc:jdbc操作
- lang:语言 UsesJava7、UsesJava8
- logging:日志支持
- mapping:映射参数、结果、SQL
- parsing:解析器 XPath、Token解析
- plugin:插件支持
- reflection:反射功能封装
- scripting:脚本
- session: 会话
- transaction:事务
- type:类型 jdbcType,javaType互转
- util:工具包
设计模式
源码中使用了很多的设计模式
- SqlSession使用门面模式
- 日志模块使用了适配器模式
- 数据源模块使用工厂模式
- 数据连接池使用策略模式
- 缓存模块使用了装饰器模式
- Executor模块使用了模板方法模式
- Builder模块使用了建造者模式
- Mapper接口使用了代理模式
- 插件模块使用责任链模式
总结
总的来说,Mybatis的代码还算比较好理解的,相对简单易懂。在了解JDBC的操作原理后,在结合Mybatis的运行原理,就能大致了解其工作流程了。后续我们将一步一步尽心分析!
猜你喜欢
- 2025-06-30 Java高级开发面试题深度解析(2025版)
- 2025-06-30 应届生/社招面试最爱问的几道Java基础问题
- 2025-06-30 Spring整合CXF 发布webservice接口服务器和客户端,WSDL简单解析
- 2025-06-30 【深入 JavaEE】Spring AOP 注解实战全解析
- 2025-06-30 如何深度理解mybatis?(如何深度理解王阳明这个人的形象)
- 2025-06-30 Springboot中的javaConfig详解(基于Spring5.2)
- 2025-06-30 Spring IoC Container 原理解析(spring ioc基本原理)
- 2025-06-30 MyBatis映射文件深入解析(Mapper.xml)
- 2025-06-30 Java七大热门技术框架源码解析(完结)
- 2025-06-30 阿里资深架构师整理分享内部绝密MyBatis源码深度解析文档
你 发表评论:
欢迎- 08-03JVM内存结构和Java内存模型
- 08-03C++ 知识小结
- 08-03Java内存模型(JMM)详解
- 08-03为什么计算机内存需要堆和栈?
- 08-03Java中,对象一定在堆中分配吗?
- 08-03看完这篇,还不懂JAVA内存模型(JMM)算我输
- 08-03别再混淆了!JVM内存模型和Java内存模型的本质区别
- 08-03【C语言】(13)堆和栈
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)