跳至主要內容

MyBatis源码概述

IT王小二约 1090 字

MyBatis源码概述

作者:IT王小二

博客:https://itwxe.comopen in new window

一、怎么下载使用MyBatis源码

1、MyBtais 源码下载地址:https://github.com/MyBatis/MyBatis-3open in new window

2、将MyBatis源码pom文件中的<optional>ture</optional>全部改为false。

3、然后在工程目录下执行mvn clean install -Dmaven.test.skip=true,将当前工程安装到本地仓库(pom文件中的pdf插件报错的话需要将这个差件报错,安装过程中会出现很多异常信息,只要不出现error即耐心等待即可)。

4、在其他工程中依赖这个工程,这样就方便使用源码,可以注释修改学习。

二、源码结构分析概述

1. 源码结构

MyBatis源码结构

2. MyBatis整体架构分层

MyBatis整体架构

  • 基础支撑层:技术组件专注于底层技术实现,通用性较强无业务含义。
  • 核心处理层:业务组件专注 MyBatis 的业务流程实现,依赖于基础支撑层。
  • 接口层:MyBatis 对外提供的访问接口,面向 SqlSession 编程。

为什么要分层呢?

  • 代码和系统的可维护性更高。
  • 方便开发团队分工和开发效率的提升。
  • 提高系统的伸缩性和性能。

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

从源码的架构分析,特别是接口层的设计,可以看出来MyBatis的整体架构符合外观模式的。

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

外观模式

  • Facade 角色:提供一个外观接口,对外,它提供一个易于客户端访问的接口,对内,它可以访问子系统中的所有功能。
  • SubSystem(子系统)角色:子系统在整个系统中可以是一个或多个模块,每个模块都有若干类组成,这些类可能相互之间有着比较复杂的关系。

门面模式优点:使复杂子系统的接口变的简单可用,减少了客户端对子系统的依赖,达到了解耦的效果;遵循了 OO 原则中的迪米特法则,对内封装具体细节,对外只暴露必要的接口。

门面模式使用场景

  • 一个复杂的模块或子系统提供一个供外界访问的接口。
  • 子系统相对独立 ― 外界对子系统的访问只要黑箱操作即可。

三、面向对象设计需要遵循的六大设计原则

在学习源码之前有必要对面向对象设计的几个原则先去了解,让自己具备良好的设计思想和理念。

  • 单一职责原则:一个类或者一个接口只负责唯一项职责,尽量设计出功能单一的接口。
  • 依赖倒转原则:高层模块不应该依赖低层模块具体实现,解耦高层与低层。既面向接口编程,当实现发生变化时,只需提供新的实现类,不需要修改高层模块代码。
  • 开放-封闭原则(开闭原则):程序对外扩展开放,对修改关闭;换句话说,当需求发生变化时,我们可以通过添加新模块来满足新需求,而不是通过修改原来的实现代码来满足需求。
  • 迪米特法则:一个对象应该对其他对象保持最少的了解,尽量降低类与类之间的耦合度;实现这个原则,要注意两个点,一方面在做类结构设计的时候尽量降低成的访问权限,能用 private 的尽量用 private;另外在类之间,如果没有必要直接调用,就不要有依赖关系;这个法则强调的还是类之间的松耦合。
  • 里氏代换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。
  • 接口隔离原则:客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。