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框架,它的功能很强大,然而其实现却比较简 ...
随机推荐
- 068、Java面向对象之声明两个对象
01.代码如下: package TIANPAN; class Book { // 定义一个新的类 String title; // 书的名字 double price; // 书的价格 public ...
- CAS实现单点登录(SSO)经典完整教程
转自 http://blog.csdn.net/small_love/article/details/6664831 一.简介 1.cas是有耶鲁大学研发的单点登录服务器 2.本教材所用环境 Tomc ...
- 2017 北京网络赛 E Cats and Fish
Cats and Fish 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 There are many homeless cats in PKU campus. They ...
- 阿里云服务器 :Linux环境下搭建Apache+php+mysql
以前我用的是Windows2012 的服务器,那时候只是抱着玩一玩的心态,所有用的是Windows,但是后来被导师给DISS了,于是决定改服务器的操作系统: (一)下载安装php+mysql+apac ...
- uboot如何启动内核
2.7.1.uboot和内核到底是什么 2.7.1.1.uboot是一个裸机程序 (1)uboot的本质就是一个复杂点的裸机程序.和我们在ARM裸机全集中学习的每一个裸机程序并没有本质区别. 2.7. ...
- mysql 数据库函数入门
- maven package跳过测试
mvn clean package -DskipTests 或者 mvn clean package -Dmaven.test.skip=true 区别 -DskipTests,不执行测试用例,但编译 ...
- MongoDB_02简介
MongoDB简介 MongoDB是一个开源,高性能,无模式的文档型数据库. 它支持的数据结构非常松散,是一种类似于JSON的格式叫BSON,所以他既可以存储比较复杂的数据类型,又相当的灵活. Mon ...
- Windows 下 GNS3 安装与基本使用指南
1.GNS3简介 GNS3是一款图形化的网络虚拟软件,可以运行在多个平台(windows,linux,mac OS).我们可以通过它来学习Cisco的认证,或者是检验将要在生产环境中部署实施的相关配置 ...
- 无法执行 BACKUP LOG,因为当前没有数据库备份,导入数据库备份.bak文件
右键数据库——>任务——>还原——>数据库 无法执行 BACKUP LOG,因为当前没有数据库备份 结尾日志的问题 还原选择中去掉结尾日志就可以了