mybatis源码整体架构一览

1.每个包的作用以及描述

image.png
org.apache.ibatis
    + annotations  定义注解
    + binding   映射绑定,mapper.xml等映射文件相关实体抽象
    + builder   解析配置文件,以及映射文件,包括xml,以及注解
    + cache     缓存,一级缓存,二级缓存    
    + cursor     游标
    + datasource 数据源
    + exceptions 异常
    + executor   执行器
    + io         资源加载相关IO操作
    + javassist  
    + jdbc       jdbc和sql相关
    + logging    日志模块
    + mapping    配置文件-映射文件相关的类
    + ognl       
    + parsing    解析配置文件和 核心类和 接口
    + plugin     插件
    + refection  反射
    + scripting    脚本解析相关
    + session      会话相关
    + transcation  事物
    + type         类型转换

2.mybatis 整体架构(挑重点)

image.png

3.因为源码用到了很多设计模式,这里解释下用设计模式的好处

1 单一职责原则 (一个功能写一个类,不要把什么都塞进一个类中,代码臃肿)

一个类只负责一种职责,只有这种职责的改变会导致这个类的变更。绕口一点的正统说法:不要存在多于一个原因导致类变更

假如:类T 负责有两种职责 P1,P2;当P1发生改变时,需要修改类T,这时候可能会对P2造成影响。

所以不要为了图代码量少,二将不同职责放入到一个类里面。

2 里氏替换原则

只要父类出现的地方,都可以用子类替换,并且不会对程序造成影响,在实现上来说就是子类不要覆盖父类的非抽象方法,但可以重载。

重载时需要注意,入参的要求要比父类宽松(保证可以进入),返回要比父类更加严格(保证出去不会有问题),这也正是实现里氏替换的基础。

3 依赖倒置原则(面向接口编程)

高层模块不应该依赖低层模块,二者都应该依赖其抽象,翻译一下就是面向接口编程;接口一般是行为的集合,也就是尽可能的对行为抽象。

抽象不应该依赖细节,细节应该依赖抽象。

4 接口隔离原则(接口功能单一)

翻译一下就是接口的功能尽可能单一,接口本质上是两个类之间关系的纽带,关系中不需要有的,在接口中不应该体现。如:A 通过接口I依赖B,假如接口I中有A 不需要的方法,那么这个接口就是不合理的,B必须要实现这个不需要的方法,徒劳无功。

5 迪米特法则(最少知道原则)

也就是说一个对象要对其他对象保持尽可能少的了解,即低耦合性,低耦合可以最大限度的保证代码的可复用性。这个实际上是针对被依赖的类来说的,对于被依赖的类,尽可能的将复杂的逻辑封装起来,对外只提供public方法,外部不需要知道内部的逻辑。

6 开闭原则(以前写的东西,最好不要动,做拓展就好)

尽量通过扩展来面对需求的更改或者系统的变化,尽量不要对原有内容修改。

后续展开对mybatis 从简单的模块到复杂的模块讲解,以及相关设计模式的回顾。

你可能感兴趣的:(mybatis源码整体架构一览)