框架原理与源码解析: MyBatis_No0 官方解析

UML图示https://www.cnblogs.com/mengheng/p/3739610.html

背景知识

ORM:时Object和Relation之间的映射,包括Object—>Relation + Relation—>Object

## Hibernate:全自动映射   Relation <—> Object

## MyBatis   :半自动映射   Relation   —> Object    即:data mapper framework

二、整体架构

2.1 功能流程层次

接口层: 【增/删/改/查】        【动态更改配置】 

——————————————————————————————————————————————————

核心层: 【配置解析】               【参数处理】- > 【SQL执行】         -> 【结果映射】         

                 [Configuration]              [属性映射]         [SimpleExecutor]        [简单映射]

                 [Mapper Statement]      [参数映射]         [BatichExecutor]         [关联映射]

                 [Parameter Mapping]    [动态SQL]         [ReuseExecutor]         [延迟加载]

                 [ResultMapping]

——————————————————————————————————————————————————

基础层: 【日志】 【缓存】 【数据源/连接池】 【事务】  【反射】

2.2 源码包架构图

接口层:【session】

——————————————————————————————————————————————————

核心层:【builder】【mapping】【cache】     【transaction】【annonation】【jdbc】

                                【scripting】 【executor】 【datasource】

                                【parsing】   【plugIn】     【binding】

——————————————————————————————————————————————————

基础层:【logging】、【io】、【reflection】、【exceptions】、【type】

基于功能流程角度的架构图的分析

1.接口层
 
2.核心层

2.1 配置解析

在应用启动的时候,MyBatis解析两种配置文件

SqlMapConfig.xml    XMLConfigBuilder类  

SqlMap.xml              XMLMapperBuilder类,

###其中把对Statement的解析(即SqlMap.xml中SELECT|INSERT|UPDATE|DELETE定义部分)委托给XMLStatementBuilder来完成

###SqlMap.xml的解析比较复杂的,涉及到PreparedMapping、ResultMapping、LanguageDriver、Discriminator、缓存、自动映射等一系列对象的构造

2.2 SQL执行

Executor主要提供了

QUERY|UPDATE(INSERT|DELETE|UPDATE),需要MappedStatement、parameter、resultHandler的实例对象

事务提交/回滚,委托Transaction对象完成

缓存,       createCacheKey()/isCacahed()

延迟加载,deferload()

关闭,       close(),主要是事务回滚/关闭

https://www.cnblogs.com/mengheng/p/3739610.html

3.基础层

3.1、logging

3.2、IO                          读取资源文件的API、封装MyBatis自身所需要的ClassLoader和加载顺序

3.3、reflection               参数处理、结果映射  

        ####需要频繁地读取Class元数据、反射调用get/set,因此MyBatis提供org.apache.ibatis.reflection封装常见的反射操作。

 [ 比如reflect时总是要处理异常(IllegalAccessException、NoSuchMethodException),MyBatis统一处理为自定义的RuntimeException]

3.4、exceptions             MyBatis主要PersistenceExeception、Spring将SQLException转换RuntimeException

3.5、缓存                       SESSION或STATEMENT作用域级别的缓存、全局的二级缓存

        ####    一级缓存     BaseExecutor中根据MappedStatement的Id、SQL、参数值以及rowBound(边界)构造CacheKey,

                                       使用BaseExecutor中的localCache维护以及缓存

        ####    二级缓存    通过CacheExecutor实现,俄日托TransactionCacheManager保存/获取缓存。

3.6、数据源/连接池        提供建议数据源/连接池org.apache.ibatis.datasource主要实现类PooledDataSource

3.7、事务                       不支持内嵌事务,委托Spring处理

猜你喜欢

转载自blog.csdn.net/ddhmbbklyk2018/article/details/82503905