1、概述
我们下载源码之后就会看到mybatis的项目结构图,其实看上去是一脸懵逼的。到底怎么去看它比较合适?
首先要搞搞懂mybatis是干嘛的?不能瞎j8看这些包。
mybatis的作用其实就是对JDBC的封装,简化了JDBC的一些操作。
回顾一下JDBC的编码过程
首先会去加载xml中配置的信息,连接数据库
然后拿到statment对sql进行查询。
查询完会接受数据库返回的结构集。
最后对结果返回给调用者。
mybatis的作用就是对JDBC进行的封装,流程如下:
2、分层设计
有了这个知识储备我们就可以对mybatis的执行进行剖析,
mybatis大体分为三层
- 接口层
- 核心层
- 基础支撑层
接口层就是去加载xml配置文件,进行配置文件的解析,形成一个session。主要是为了解决JDBC重复去拿配置文件去创建session的开销。从而衍生出了一个公用的sqlSession。
当一个执行访问数据库就会在sqlsession中去调用executor进行全部sql的访问控制。
每一个sql会先去Executor进行报道,Executor会根据sql是哪种类型(增删改差)分配一个Handler进行处理。
处理完之后就通过底层的JDBC去执行sql,从而拿到结构集,然后对结构进行处理,统一返回给调用者。
核心层调用过程中肯定少不了一些基础组件的功能,如事物,缓存等。这些统统都放在了基础支持层。
3、包的结构
有了前面知识的总结,再看mybatis的包的功能。
Mybatis的包的作用如下:
parsing:解析xml以及properties文件 io:读取mybatis的配置文件
datasource:mybatis自己实现的数据库连接池
builder:根据sqlmapConfig.xml,sqlmap.xml,初始化SQL执行环境,如实例化Configuration、参数对象、结果集对象等,包含注解与xml两种实现
binding:通过类名+方法名的形式去找到对应的SqlSession方法实现
session:SQL语句执行的入口,主要创建session相关的实现
type:初始化sqlmapConfig.xml的别名注册,以及类型处理注册
plugin:拦截器相关类,要对SQL特殊处理就可以实现该包中的Interceptor,如分页查询
executor:sql执行的核心,获取配置文件的,实现可以执行的sql,最终处理结果集,这些过程都在executor中实现
cache:各种缓存实现 mapping:sqlmapConfig.xml,sqlmap.xml中的标签映射类
4、总结
首先mybatis是对JDBC的封装,看源码的时候看主流程就可以了。
myabtis把结构大体分为三层:
1、接口层
2、核心层
3、基础层
包的作用可以看上面的第三点
下面是对mybatis包的一个结构图,盗用一张网上的图。