MyBatis整体架构
Mybatis整体架构

基础支持层
反射模块
Java中的反射很强大,但是还是需要封装的。MyBatis专门提供了反射模块,对元素的反射进行了封装,提供了简洁的API,对反射进行了优化,例如缓存了类的元数据,提高反射操作的性能。
类型转换模块
MyBatis提供了别名机制,该机制是类型转换的主要功能之一。类型转换的另一个功能是实现JDBC类型和Java类型之间的转换。在为SQL语句绑定实参是,会将数据由java类型转为JDBC类型;在映射结果集时,会将数据由JDBC转为Java类型。
日志模块
在开发测试/上线环境中,都需要日志。可以继承第三方日志框架:
如:Log4j、Log4j2、slf4j等
资源加载模块
对类加载器进行封装,确定类加载器的使用顺序,提供了加载类文件和其他资源文件的功能
解析器模块
- 对Xpath进行封装,为解析mybatis-config.xml,mapper文件提供支持;
- 为处理动态SQL语句中的占位符提供支持
数据源模块
事务模块
MyBatis对数据库中的事务进行了抽象,提供了相应的事务接口和简单实现。
缓存模块
MyBatis提供了一级缓存和二级缓存。MyBatis自带的这两级缓存与MyBatis以及整个应用是运行在同一个JVM中,共享内存。所以当数据量很大时,有限考虑使用Redis、Memcache等产品。
Binding模块
在使用接口+Mapper方式时,在程序启动时,MyBatis会扫描Mapper,并选择namespace对应的接口,将接口方法和mapper的ID进行匹配,如果存在错误则会抛出异常。
不需要实现dao层的接口,MyBatis会自动创建代理对象。
例如:sqlSession.getMapper(UserDao.class); // mybatis
@Autowired // Spring中

核心处理层
核心处理层包括:MyBatis的初始化;一次完成数据库操作的所有流程;
配置解析
在MyBatis初始化过程中,会加载mybatis-config.xml文件、mapper文件和接口中的注解信息,解析完后会将信息会以相应的形式保存到Configuration对象中。例如:节点会解析成ResultMap对象;接口被解析成ResultMapping对象。之后,利用Configuration对象创建SqlSessionFactory对象。
在MyBatis初始化完成后,来发人员利用SqlSessionFactory创建SqlSession对象完成数据库操作。
SQL解析和scripting模块
MyBatis实现了动态SQL语句的功能,提供了多种动态SQL语句对应的节点。如等。
scripting模块会解析动态SQL节点,生成SQL语句。之后处理SQL语句中的占位符,绑定用户传入的实参。
SQL执行
Executor、StatementHandler、ParameterHandler和ResultSetHandler。Executor辅助维护一级和二级缓存,提供事务管理的相关操作,将数据库操作委托给StatementHandler完成。
StatementHandler首先通过ParameterHandler完成SQL语句的实参绑定,然后通过java.sql.Statement对象执行SQL语句得到结果集,最后通过ResultSetHandler完成结果集的映射,得到结果并返回。

插件
用户自定义插件可以改变MyBatis的默认行为,例如:拦截SQL语句,并重写。
接口层
SqlSession,没啥好说的
MyBatis整体架构的更多相关文章
- MyBatis源码分析(二):MyBatis整体架构及原理
一.Mybatis整体架构导图 二.Mybatis的核心组成 SqlSessionFactoryBuilder(构造器): 根据配置信息(XML)生成SqlSessionFactory工厂接口,构造器 ...
- 由浅入深--MyBatis整体架构
学一门技术,做一件事不应该马上就直接进入到细节中,而是应该鸟瞰其全貌,了解它的整体架构和执行流程. MyBatis的整体架构 MyBatis的整体架构分为三层,分别是基础支持层,核心处理层和接口层,各 ...
- Mybatis源码学习之整体架构(一)
简述 关于ORM的定义,我们引用了一下百度百科给出的定义,总体来说ORM就是提供给开发人员API,方便操作关系型数据库的,封装了对数据库操作的过程,同时提供对象与数据之间的映射功能,解放了开发人员对访 ...
- Mybatis技术内幕(一)——整体架构概览
Mybatis技术内幕(一)--整体架构概览 Mybatis的整体架构分为三层,分别是基础支持层.核心处理层和接口层. 如图所示: 一.基础支持层 基础支持层包含整个Mybatis的基础模块,这些模块 ...
- MyBatis 源码篇-整体架构
MyBatis 的整体架构分为三层, 分别是基础支持层.核心处理层和接口层,如下图所示. 基础支持层 反射模块 该模块对 Java 原生的反射进行了良好的封装,提供了更加简洁易用的 API ,方便上层 ...
- 精尽 MyBatis 源码分析 - 整体架构
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...
- 浅析MyBatis(一):由一个快速案例剖析MyBatis的整体架构与运行流程
MyBatis 是轻量级的 Java 持久层中间件,完全基于 JDBC 实现持久化的数据访问,支持以 xml 和注解的形式进行配置,能灵活.简单地进行 SQL 映射,也提供了比 JDBC 更丰富的结果 ...
- 【Mybatis源码解析】- 整体架构及原理
整体架构 version-3.5.5 在深入了解Mybatis的源码之前,我们先了解一下Mybatis的整体架构和工作原理,这样有助于我们在阅读源码过程中了解思路和流程. 核心流程 在上一遍的入门程序 ...
- 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析
作者博客:http://blog.csdn.net/u010349169/article/category/2309433 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简 ...
随机推荐
- Nginx配置详解 http://www.cnblogs.com/knowledgesea/p/5175711.html
Nginx配置详解 序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作 ...
- Spring事务服务
Spring事务服务 (2013-07-22 11:13:36) 转载▼ 标签: 事务管理 ssh 分类: Sping Spring为事务管理提供了一流的支持.同时支持编程式事务和声明式事务.无论是编 ...
- 想要转战CSDN了!!
CSDN博客地址: https://blog.csdn.net/weixin_41559364
- Docker介绍(一)
在TES GLOBAL,我们已经爱上Docker并从Docker的0.8版本开始就在生产环境中使用它.我们的很多开发者都参加了在DockerCon欧洲上的培训.下面是我们总结的一些tips,希望可以帮 ...
- activity带参跳转和界面登录
首先 首先是MainActivity的xml文件 <?xml version="1.0" encoding="utf-8"?> <Linear ...
- 并行执行 Job【转】
有时,我们希望能同时运行多个 Pod,提高 Job 的执行效率.这个可以通过 parallelism 设置. 这里我们将并行的 Pod 数量设置为 2,实践一下: Job 一共启动了两个 Pod,而且 ...
- MySQL 如何使用 PV 和 PVC?【转】
本节演示如何为 MySQL 数据库提供持久化存储,步骤为: 创建 PV 和 PVC. 部署 MySQL. 向 MySQL 添加数据. 模拟节点宕机故障,Kubernetes 将 MySQL 自动迁移到 ...
- Font Awesome可缩放的矢量图标
我感觉图标还行~~~这里是我修改过的,自己根据需要修改即可~~ 网址: http://fontawesome.dashgame.com/ 使用: <link rel="styleshe ...
- Hive 中的 order by, sort by, distribute by 与 cluster by
Order By order by 会对输入做全排序, 因此只有一个Reducer(多个Reducer无法保证全局有序), 然而只有一个Reducer, 会导致当输入规模较大时, 消耗较长的计算时间. ...
- NO15 第一关课后考试
第一关课后考试: 1.创建目录/data/oldboy,并且在该目录下创建文件oldboy.txt,然后在文件oldboy.txt里写如内容:inet addr:10.0.0.8 Bcast:10.0 ...