Mybatis源码分析一-Mybatis基础架构以及设计模式

简介: Mybatis源码分析一-Mybatis基础架构以及设计模式

mybatis的源码层次结构清晰,并且用到了多种设计模式,学习mybatis的源码对于我们提高模块设计能力有很大的帮助。今天开始,我们一起看下mybatis的源码骨架到底是什么样子的把。


一、Mybatis源码导入


1、mybatis源码下载地址


MyBatis源码下载地址: https://github.com/MyBatis/MyBatis-3


2、源码包导入过程:


  1. 下载Mybatis源码
  2. 检查Maven版本,必须是3.25以上
  3. Mybatis工程是Maven项目,JDK必须是1.8版本
  4. pom文件汇总添加<optional>true<optional> 全部改为false
  5. 在工程目录下执行mvn clean install -Dmaven.test.skip = true 将当前工程安装到本地仓库


二、Mybatis源码整体架构


1、源码整体架构

2115b13dc2a8337ed4cda6d0e7feecd2.png

Mybatis的源码主要分为三层,基础支撑曾,核心处理层和接口层

  • 基础支撑层:技术组件专注于底层技术实现,给上层业务提供通用组件,通用性较强无业务含义;
  • 核心处理层:业务组件专注 MyBatis的业务流程实现,依赖于基础支撑层;
  • 接口层: MyBatis对外提供的统一访问接口,使其简化开发,让开发者们可以面向 SqlSession编程;


2、为什么mybatis设计要分层?


1.代码和系统的可维护性更高。


系统分层之后,每个层次都有自己的定位,每个层次内部的组件都有自己的分工,系统就会变得很清晰,维护起来非常明确;


2.方便开发团队分工和开发效率的提升;


举个例子, mybatis这么大的一个源码框架不可能是一个人开发的,他需要一个团队,团队之间肯定有分工,既然有了层次的划分,分工也会变得容易,开发人员可以专注于某一层的某一个模块的实现,专注力提升了,开发效率自然也会提升;


3.提高系统的伸缩性和性能。


系统分层之后,我们只要把层次之间的调用接口明确了,那我们就可以从逻辑上的分层变成物理上的分层。当系统并发量吞吐量上来了,怎么办?为了提高系统伸缩性和性能,我们可以把不同的层部署在不同服务器集群上,不同的组件放在不同的机器上,用多台机器去抗压力,这就提高了系统的性能。压力大的时候扩展节点加机器,压力小的时候,压缩节点减机器,系统的伸缩性就是这么来的;


3、外观模式(门面模式)


从源码的架构分析,特别是接口层的设计,可以看出来 MyBatis 的整体架构符合门面模式的。 门面模式定义:提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一 个高层接口,让子系统更容易使用。类图如下


ba5e3c11b230f650af0ff4dd866cbf28.png


门面模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。


Facade 角色:提供一个外 观接口,对外,它提供一 个易于客户端访问的接 口,对内,它可以访问子 系统中的所有功能。

SubSystem(子系统)角 色:子系统在整个系统中 可以是一个或多个模块, 每个模块都有若干类组 成,这些类可能相互之间 有着比较复杂的关系。


优点:

使复杂子系统的接口变的简单可用,减少了客户端对子系统的依赖,达到了解耦的效果;

遵循了六大原则中的迪米特法则,对内封装具体细节,对外只暴露必要的接口。

使用场景


一个复杂的模块或子系统提供一个供外界访问的接口

子系统相对独立 ― 外界对子系统的访问只要黑箱操作即可


三、设计模式六大理念


学习源码的目的除了学习编程的技巧、经验之外,最重要的是学习源码的设计的思想以及设计模式的灵活应用,因此在学习源码之前有必要对面向对象设计的几个原则先深入的去了解,让自己具备良好的设计思想和理念;


1.单一职责原则

一个类或者一个接口只负责唯一项职责,尽量设计出功能单一的接口;

2.依赖倒转原则

高层模块不应该依赖低层模块具体实现,解耦高层与低层。既面向接口编程,当实现发生变化时,只需提供新的实现类,不需要修改高层模块代码 ;

3.开放 -封闭原则

程序对外扩展开放,对修改关闭;换句话说,当需求发生变化时,我们可以通过添加新模块来满足新需求,而不是通过修改原来的实现代码来满足新需求;

4.迪米特法则

一个对象应该对其他对象保持最少的了解,尽量降低类与类之间的耦合度;实现这个原则,要注意两个点,一方面在做类结构设计的时候尽量降低成员的访问权限,能用 private的尽量用 private;另外在类之间,如果没有必要直接调用,就不要有依赖关系;这个法则强调的还是类之间的松耦合;

5.里氏代换原则

所有引用基类(父类)的地方必须能透明地使用其子类的对象;

6.接口隔离原则

客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上;

今天作为Mybatis源码的开胃菜,让大家在复习一下设计模式的基本原则以及Mybatis的设计的基本架构,下章我们对Mybatis的日志模块所用到的数据结构和源码进行分析!

目录
相关文章
|
6月前
|
设计模式 存储 前端开发
MVVM、MVC、MVP三种常见软件架构设计模式的区别
MVC、MVP 和 MVVM 是三种常见的软件架构设计模式,主要通过分离关注点的方式来组织代码结构,优化开发效率。
141 12
|
7月前
|
安全 Java 应用服务中间件
阿里技术官架构使用总结:Spring+MyBatis源码+Tomcat架构解析等
分享Java技术文以及学习经验也有一段时间了,实际上作为程序员,我们都清楚学习的重要性,毕竟时代在发展,互联网之下,稍有一些落后可能就会被淘汰掉,因此我们需要不断去审视自己,通过学习来让自己得到相应的提升。
|
7月前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
112 0
|
1月前
|
SQL Java 数据库连接
Mybatis架构原理和机制,图文详解版,超详细!
MyBatis 是 Java 生态中非常著名的一款 ORM 框架,在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架。本文详细解析了MyBatis的架构原理与机制,帮助读者全面提升对MyBatis的理解和应用能力。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Mybatis架构原理和机制,图文详解版,超详细!
|
2月前
|
设计模式 API 持续交付
深入理解微服务架构:设计模式与实践
【10月更文挑战第19天】介绍了微服务架构的核心概念、设计模式及最佳实践。文章详细探讨了微服务的独立性、轻量级通信和业务能力,并介绍了聚合器、链式和发布/订阅等设计模式。同时,文章还分享了实施微服务的最佳实践,如定义清晰的服务边界、使用API网关和服务发现机制,以及面临的挑战和职业心得。
|
2月前
|
设计模式 测试技术 持续交付
架构视角下的NHibernate:设计模式与企业级应用考量
【10月更文挑战第13天】随着软件开发向更复杂、更大规模的应用转变,数据访问层的设计变得尤为重要。NHibernate作为一个成熟的对象关系映射(ORM)框架,为企业级.NET应用程序提供了强大的支持。本文旨在为有一定经验的开发者提供一个全面的指南,介绍如何在架构层面有效地使用NHibernate,并结合领域驱动设计(DDD)原则来构建既强大又易于维护的数据层。
40 2
|
2月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
162 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
5月前
|
设计模式 存储 运维
微服务架构中的服务发现与注册中心设计模式
在现代软件工程实践中,微服务架构已成为构建灵活、可扩展系统的首选方案。本文将深入探讨微服务架构中至关重要的服务发现与注册中心设计模式。我们将从服务发现的基本原理出发,逐步解析注册中心的工作机制,并以Eureka和Consul为例,对比分析不同实现的优劣。文章旨在为开发者提供一套清晰的指导原则,帮助他们在构建和维护微服务系统时做出更明智的技术选择。
|
5月前
|
设计模式 监控 Java
探索微服务架构的弹性设计模式
【7月更文挑战第19天】在现代后端开发中,微服务架构因其灵活性、可扩展性而受到企业的青睐。本文将深入探讨微服务架构中的弹性设计模式,包括其定义、重要性以及如何通过技术手段实现服务的高可用性和容错性。我们将通过实例分析,展示如何在微服务系统中应用这些模式以提高系统的整体稳定性和响应能力。
65 1
|
6月前
|
安全 前端开发 Java
挑战5分钟内基于Springboot+SpringMVC+Mybatis-plus快速构建web后端三层架构
挑战5分钟内基于Springboot+SpringMVC+Mybatis-plus快速构建web后端三层架构
54 1