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整体架构的更多相关文章

  1. MyBatis源码分析(二):MyBatis整体架构及原理

    一.Mybatis整体架构导图 二.Mybatis的核心组成 SqlSessionFactoryBuilder(构造器): 根据配置信息(XML)生成SqlSessionFactory工厂接口,构造器 ...

  2. 由浅入深--MyBatis整体架构

    学一门技术,做一件事不应该马上就直接进入到细节中,而是应该鸟瞰其全貌,了解它的整体架构和执行流程. MyBatis的整体架构 MyBatis的整体架构分为三层,分别是基础支持层,核心处理层和接口层,各 ...

  3. Mybatis源码学习之整体架构(一)

    简述 关于ORM的定义,我们引用了一下百度百科给出的定义,总体来说ORM就是提供给开发人员API,方便操作关系型数据库的,封装了对数据库操作的过程,同时提供对象与数据之间的映射功能,解放了开发人员对访 ...

  4. Mybatis技术内幕(一)——整体架构概览

    Mybatis技术内幕(一)--整体架构概览 Mybatis的整体架构分为三层,分别是基础支持层.核心处理层和接口层. 如图所示: 一.基础支持层 基础支持层包含整个Mybatis的基础模块,这些模块 ...

  5. MyBatis 源码篇-整体架构

    MyBatis 的整体架构分为三层, 分别是基础支持层.核心处理层和接口层,如下图所示. 基础支持层 反射模块 该模块对 Java 原生的反射进行了良好的封装,提供了更加简洁易用的 API ,方便上层 ...

  6. 精尽 MyBatis 源码分析 - 整体架构

    该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...

  7. 浅析MyBatis(一):由一个快速案例剖析MyBatis的整体架构与运行流程

    MyBatis 是轻量级的 Java 持久层中间件,完全基于 JDBC 实现持久化的数据访问,支持以 xml 和注解的形式进行配置,能灵活.简单地进行 SQL 映射,也提供了比 JDBC 更丰富的结果 ...

  8. 【Mybatis源码解析】- 整体架构及原理

    整体架构 version-3.5.5 在深入了解Mybatis的源码之前,我们先了解一下Mybatis的整体架构和工作原理,这样有助于我们在阅读源码过程中了解思路和流程. 核心流程 在上一遍的入门程序 ...

  9. 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

    作者博客:http://blog.csdn.net/u010349169/article/category/2309433 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简 ...

随机推荐

  1. LATTICE 编程烧录器HW-USBN-2B使用说明

    HW-USBN-2B说明文档 1.       引脚定义 编程引脚 名称 编程设备引脚类型 描述 VCC 编程电压 输入 连接VCC到目标设备,典型的ICC=10Ma.板子设计必须考虑VCC的电流供应 ...

  2. python 阶乘函数

    def num(n): if n == 1: return n return n*num(n-1) print(num(10)) 输出 3628800 该函数使用了递归函数的规则.return 后面为 ...

  3. 机器阅读理解(看各类QA模型与花式Attention)(转载)

    目录 简介 经典模型概述 Model 1: Attentive Reader and Impatient Reader Attentive Reader Impatient Reader Model ...

  4. 拓扑排序--P2881 [USACO07MAR]排名的牛Ranking the Cows

    *传送 FJ想按照奶牛产奶的能力给她们排序.现在已知有N头奶牛(1 ≤ N ≤ 1,000).FJ通过比较,已经知道了M(1 ≤ M ≤ 10,000)对相对关系.每一对关系表示为“X Y”,意指X的 ...

  5. JAVA字符串比较问题

    在java中值类型通过==来进行比较值是否相等 而字符串作为一种引用类型,通过==是用来比较其内存位置的,使用equals才是用来比较其值是否相等 使用equals时养成将字符串放在前面的好习惯 字符 ...

  6. 使用 Dashboard【转】

    上一节我们完成了 Kubernetes Dashboard 的安装,本节就来实践一下. Dashboard 界面结构 Dashboard 的界面很简洁,分为三个大的区域. 顶部操作区在这里用户可以搜索 ...

  7. springcloud--ruul(路由网关)

    Zuul的主要功能就是路由转发和过滤器 实例: 1:添加依赖pom.xml: <dependencies> <dependency> <groupId>org.sp ...

  8. 修改tomcat的字符集问题

    转 默认情况下,tomcat使用的是iso8859-1的编码编码方式,浏览器的embed标签中src指向的地址要通过tomcat去解析.如果包含中文,采用这种编码方式就会出现乱码问题,而在这种情况下, ...

  9. .nerCore-RabbitMQDemo消息队列

    1.定义:MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.MQ是消费- ...

  10. ActorFramework教程对比及规划

    牢骚太盛防肠断,风物长宜放眼量. 一.引子 昨天的文章,本来就是想写写ActorFramework的教程内容,结果写着写着偏了,变成了吐槽. 首先,声明一下,自己从未参加过任何LabVIEW培训班,也 ...