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] [关联映射]
扫描二维码关注公众号,回复:
3089284 查看本文章
[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(),主要是事务回滚/关闭 |
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处理 |