1. MyBatis 整体架构

作为正式内容的第一篇,本次不会介绍具体的技术,而是先从全局视角上对 MyBatis 做一个俯瞰,了解 MyBatis 项目工程的组织结构,以及内部的核心功能模块。

工程结构

打开 MyBatis 的 Github 地址,就可以看到其代码工程结构。MyBatis 的分包方式简洁清晰、见名知义,可以清晰地看出内部的功能模块。下面我对其中较为核心的模块进行下简单介绍:
MyBatis工程结构

  1. annotatios:注解开发模块,定义了所有 Mapper 接口中用到的注解,常用的如 @Param,@Update、@Select、@Delete 等。
  2. binding:数据绑定模块,通过动态代理方式生成 Mapper 接口的实现类,并对其生命周期进行管理。
  3. builder:构建器模块,基于构建者模式(Builder Pattern),定义了 MyBatis 内部所有的构建器。MyBatis 的核心组件大部分都是通过 Builder 来构造的。
  4. cache:缓存模块,内置了各种缓存装饰器(Decorator),MyBatis 中耳熟能详的一级缓存、二级缓存就是基于该模块来实现的。
  5. cursor:支持游标的方式的数据查询,比较适合处理大数据量的查询场景。
  6. datasource:数据源模块,其中包含了 MyBatis 自定义的一款简易的数据源。
  7. exceptions:定义了常用的异常。
  8. executor:执行器模块,承载了 MyBatis 的核心执行流程,主要功能包括:Statement 创建、SQL 参数拼接、动态参数绑定、SQL 语句执行、结果集解析等。
  9. io:资源文件读取模块,用于定位和加载 MyBatis 相关的配置信息。
  10. jdbc:提供了操作原生 JDBC 的一些工具类。
  11. lang:这个包只包含了2个注解:@UsesJava7@UsesJava8 ,主要是用于标识类、方法等元素的 JDK 实现版本。
  12. logging:日志模块,MyBatis 自定义了统一的日志级别,饼整合了多种主流的第三方日志框架。
  13. mapping:映射模块,提供了配置文件与实体对象的映射功能,包括 Mapper 映射、参数映射、结果集映射等。
  14. parsing:字符串解析工具包,解析 SQL 语句中 $# 诸如此类的占位符,并生成 SQL 语句。
  15. plugin:插件模块,基于动态代理模式实现功能的扩展。著名的分页插件 PageHelper 就是基于 plugin 模块实现的。
  16. reflection:反射模块,是对 Java 底层的反射机制的二次封装,并提供了一系列的易用的反射工具类。
  17. scripting:动态 SQL 支持,mapper 配置文件中 ifwhere 等 SQL 标签的功能就是基于此实现的。
  18. session:会话核心模块,实现了 SqlSession 的功能。
  19. transaction:事务模块,MyBatis 基于原生 JDBC 实现了基础的事务功能。
  20. type:类型处理模块,内置了一系列的 数据库类型 <-> Java 类型的转换器。

功能架构

介绍完了 MyBatis 的工程结构之后,我们一起看一下它的整体功能架构。按照业内主流的共识,MyBatis 的功能可以按照以下层次划分:
MyBatis功能架构

  1. 基础支撑层:主要面向底层技术,提供了一系列业务无关的通用能力,对核心处理层提供支持。基础支撑层的很多组件都可以单独拿出来放在我们自己的项目里使用。
  2. 核心处理层:MyBatis 在原生 JDBC 的基础上进行了高度的封装与抽象,提取了配置解析、SQL 解析、参数映射、SQL 执行和结果集映射等几大核心功能,并开发了插件机制解决扩展性的问题。
  3. 接口层:对外统一暴露了 SqlSessionMapper 接口进行数据库操作,屏蔽了底层的实现细节,大大简化了数据访问功能的开发流程。

门面模式 Facade Pattern

从 MyBatis 的整体架构来看,它的结构类似于门面模式,SqlSession 就相当于一个 Facade,内部聚合了 MyBatis 核心处理层的各个组件,来实现对数据库的各种操作,而对外屏蔽了复杂的逻辑处理,仅保留简单的 API 供客户端使用。这样一来,客户端无需关心 MyBatis 内部的实现细节,减少了用户的理解和学习成本。

Facade Pattern
(图片来源:https://refactoring.guru/design-patterns/facade)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/7266.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过Appium Desktop实现录制功能并导出自动化脚本

1、我们进入下面这个界面 图中红色标记1为 “top by coordinates” 按钮&#xff0c; 这是一种通过坐标定位元素的方式。 图中红色标记2为 “Start Recording” 按钮&#xff0c; 选中表示处理录制状态。 2、点击“top by coordinates” 按钮&#xff0c;再点击 “Start Recor…

论文阅读 (94):Substructure Aware Graph Neural Networks (SAGNN, AAAI2023)

文章目录 1 要点1.1 概述1.2 一些概念1.3 代码1.4 引用 2 基础知识2.1 符号2.2 信息传递神经网络 (MPNN) 3 方法3.1 子图提取3.1.1 基于节点的策略3.1.2 基于图的策略 3.2 随机游走返回概率编码3.3 子图信息注入的信息传递 1 要点 1.1 概述 题目&#xff1a;子结构感知图神经…

【随笔】jupyter notebook启动打开文件出现:500 : Internal Server Error

错误&#xff1a; 看log有 module ‘mistune’ has no attribute BlockGrammar’错误 打开文件有500 : Internal Server Error 解决方法&#xff1a; pip install --upgrade jupyterhub pip install --upgrade --user nbconvertconda环境可以&#xff1a; conda install nbc…

linux基础命令总结

目录标题 目录操作1.绝对路径和相对路径2.目录的基本操作3.chomd、chown、chgrp4.cd命令 文件操作1.touch2.more4.cat5.grep6.rm7.cp8.mv9.find 磁盘操作1.df2.du date、passwd1.date2.passwd su、clear、man、who1.su2.man3.clear4.who unameuptimefreepsps与grep、kill1.与gr…

【LeetCode】HOT 100(20)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

银河麒麟服务器 v10 sp1 安装 .Net6.0

系统版本、架构&#xff1a; 如果系统自带.netcore3&#xff0c;先卸载系统自带的.netcore3&#xff1a; 卸载.netcore3&#xff1a; 我的系统没有自带.netcore3&#xff0c;也没有yum命令。 下载二进制文件安装SDK&#xff1a; 下载 .NET 6.0 (Linux、macOS 和 Windows) 下载…

deeplabv3+源码之慢慢解析main.py(1)--get_argparser函数

deeplab v3源码 慢慢解析系列 本带着一些孩子们做&#xff0c;但本硕能独立看下来的学生不多。和孩子们一起再学一遍吧。希望孩子们和我自己都能坚持写下去吧。网上资料太多了&#xff0c;但不够慢&#xff0c;都是速成&#xff0c;没有足够的解释和补充&#xff0c;希望这次够…

DDR4技术原理详解

DDR4是DDR4-SDRAM的简写&#xff0c;即第4代DDR-SDRAM&#xff0c;DDR-SDRAM全称Double Date Rate Synchronous Dynamic Random Access Memory。本文重点解析DDR4技术规范及其背后的电子电路原理&#xff0c;以及编程使用DDR4过程中需要注意的性能事项。 DDR4数据存储原理 DD…

仙剑风景图片生成【InsCode Stable Diffusion美图活动一期】

一、 Stable Diffusion 模型在线使用地址&#xff1a;https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型版本及相关配置&#xff1a; Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 423016627, Size: 512x512, Model hash: 74c61c3a52, Model: GuoFeng3,…

keil_arm满减栈应用场景

.text .global _start _start:满减压栈使用场景ldr sp,0x40000800mov r0,#0x1mov r1,#0x2bl add1_funcadd r0,r0,r1 r0 r0 r1 0x3b stopadd1_func: 压栈保存现场 r0 0x1 r1 0x2stmfd sp!,{r0,r1&#xff0c;lr}mov r0,#0x3mov r1,#0x4bl add2_funcadd r0,r0,r1 r0 r…

【实战】 六、用户体验优化 - 加载中和错误状态处理(上) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(八)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理1.给页面添加 …

Observability:Synthetic monitoring - 合成监测入门

从我们的全球测试基础设施监控关键用户旅程&#xff0c;并了解网络和前端性能对用户体验的影响。 全面了解你的网站性能、功能和可用性&#xff08;从开发到生产&#xff09;&#xff0c;并在客户之前发现问题。合成监测&#xff08;synthetic monitoring&#xff09;使你能够模…