0x00:MyBatis 架构组成

MyBatis 整体的架构组成为:数据源配置文件、SQL 映射配置文件、会话工厂、会话、执行器以及底层封装对象组成。

0x01:数据源配置文件

对于持久层框架,连接数据库是最重要的一步。MyBatis 框架对于数据库连接的配置信息采用了数据库连接池的形式。数据库连接池负责分配、管理、和释放数据库连接,其只使用一个连接,提高了操作性能。不像 JDBC,每次对数据库操作,都需要连接然后释放,这也是 MyBatis 相对 JDBC 其中的一个优点。
程序本身就不用再关心数据库的配置信息,交给 MyBatis 配置文件管理即可。文件名为 SqlMapConfig.xml。其中配置了数据库驱动、数据库连接地址、数据库用户名和密码、事务管理等参数。例如以下示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><!-- 使用JDBC事务管理 --><transactionManager type="JDBC"/><!-- 数据库连接池 --><dataSource type="POOLED"><property name="driver" value="org.git.mm.mysql.Driver"/><property name="url" value="jdbc:mysql://localhost:3306"/test?characterEncoding=utf-8"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments>
</configuration>

连接池中的 org.git.mm.mysql.Driver 是 com.mysql.jdbc.Driver 的之类,也是 Mysql 数据库的连接驱动,如果项目中有整合 SpringMVC 框架时,则连接池可配在 SpringMVC 的配置文件中。

0x02:SQL 映射配置文件

在 JDBC 中,sql 语句一般会写在 java 文件中,而 MyBatis 会将这些 sql 语句单独放在配置文件中 Mapper.xml。
作用流程:MyBatis 会根据配置文件中的参数配置,将组装了参数的 Java 对象或 Map 对象中的相关字段与 Mapper.xml 中的参数配置做匹配,将相关参数绑定到需要执行的 sql 语句上。其 Mapper.xml 配置文件,完成了对 sql 语句的映射配置。例如以下示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test"><select id="id" parameterType="int" resultType="cn.com.mybatis.model.User">SELECT * FROM USER WHERE id=#{id}</select>
</mapper>

其中,id 是 sql 语句要绑定的字段名,parameterType 是绑定字段的类型,resultType 是把结果映射为一个 Java 对象。
Mapper.xml 文件一般配置在 SqlMapConfig.xml 中,示例代码如下:

<mappers><mapper resource="Mapper.xml"/>
</mappers>

0x03:会话工厂与会话

当数据库连接池配置文件 SqlMapConfig.xml 和 sql 映射配置文件 Mapper.xml 都准备好后,就需要相关的程序来读取并加载这些配置文件的信息,MyBatis 用来处理这些配置文件的核心对象就是会话工厂与会话。
MyBatis 中,会话工厂是 SqlSessionFactory 类。SqlSessionFactory 会根据数据库配置信息产生可以连接数据库并与其交互的 SqlSession 会话实例类。而 SqlSession 实例类,便会依照 Mapper 配置文件中的 sql 配置,对数据库执行增删改查的操作。

0x04:执行器和底层封装对象

SqlSession 类内部是通过执行器 Executor 对数据库进行操作的,执行器 Executor 与数据库交互,依靠的是底层封装对象 Mappered Statement,这个底层对象 Mappered Statement 封装了从 Mapper 文件读取信息的功能,读取的内容包括 sql 语句、输入参数、输出结果类型等。

0x05:MyBatis 运行流程

MyBatis 的运行流程其实就是其架构的处理流程,总结下如下:
首先,SqlSessionFactory 会话工厂会加载 SqlMapConfig.xml 配置文件信息,然后生成一个可以与数据库交互的会话实例类 SqlSession,会话实例类 SqlSession 会根据 Mapper 配置文件中的 sql 配置,去执行相应的增删改查操作。这样,MyBatis 就实现了与数据库的交互功能。

MyBatis 运行流程结构图如下:

当了解了 MyBatis 运行流程后,会更好更容易的去学习这个框架。

MyBatis的架构和其运行流程相关推荐

  1. Netty框架架构解析+API+运行流程+网络编程文章集锦

    新手入门:目前为止最透彻的的Netty高性能原理和框架架构解析 <!-- 作者区域 --><div class="author"><a class=& ...

  2. python爬虫流程-Python爬虫程序架构和运行流程原理解析

    1 前言 Python开发网络爬虫获取网页数据的基本流程为: 发起请求 通过URL向服务器发起request请求,请求可以包含额外的header信息. 获取响应内容 服务器正常响应,将会收到一个res ...

  3. SSM框架中MVC各层的作用以及运行流程

    这篇博文主要介绍的是SSM(Spring.SpringMVC.Mybatis)框架中,MVC各层的作用以及各层之间的交互和框架整体运行流程. 一.MVC各层级间的作用及关系 表现层(springMVC ...

  4. SSM三大框架的运行流程、原理、核心技术详解!

    一.Spring部分 1.Spring的运行流程 第一步:加载配置文件ApplicationContext ac = new ClassPathXmlApplicationContext(" ...

  5. 2021年大数据Hadoop(二十七):YARN运行流程

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn运行流程 本系列历史文章 2021年大数据Hado ...

  6. spark on yarn 完全分布式_Spark编程笔记(1)-架构基础与运行原理

    引言 根据IBM前首席执行官郭士纳的观点,IT领域每隔十五年就会迎来一 次重大变革 .当前我们正处于第三次信息浪潮(2010年前后),物联网.云计算和大数据技术突飞猛进. 信息爆炸是我们当前所需要解决 ...

  7. Apache Shiro的运行流程和权限控制方式分析

    Apache Shiro的运行流程和权限控制方式分析 Shiro的架构有3个主要的概念: Subject SecurityManager Realms 下面的关系图是关于这些组件是如何交互的高级概述. ...

  8. 搜狗词库爬虫(2):基础爬虫框架的运行流程

    系列目录: 搜狗词库爬虫(1):基础爬虫架构和爬取词库分类 项目Github地址:github.com/padluo/sogo- 各模块对应的内容如下: getCategory.py,提取词库分类ID ...

  9. Lerna 运行流程剖析

    大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

最新文章

  1. sql server 连接工具_SQL on file 工具
  2. Hadoop 分布式集群搭建步骤
  3. GPU云服务器+tensorboard
  4. [2018/11/13]图像处理
  5. 程序员修仙之路-数据结构之 CXO让我做一个计算器
  6. 【转】2.2【MySQL】运行原理(二):InnoDB 内存结构、磁盘结构及update sql执行过程分析
  7. 让互联网助小组合作一臂之力
  8. 计算机做镜像步骤,如何将当前的操作系统做成镜像?
  9. 11.solr学习速成之MoreLikeThis
  10. 华为否认窃密;贾跃亭陪许家印考察FF;谷歌或被罚95亿欧元 | 极客头条
  11. C#:在u3d中操作sqlite的数据库
  12. layer数据加载中,loading的显示
  13. 【springmvc】SpringMVC启动流程及源码分析
  14. 如何解决安装佳能LBP2900驱动时总是提示无法识别USB连接(附带驱动程序下载地址)
  15. 计算机学业水平测试初中生操作题,初中学业水平考试信息技术考试操作题常见题型及作答方法...
  16. 怎么解决打印机“正在删除-已发送到打印机”打印状态
  17. 安科瑞ACX电瓶车智能充电桩,充满自停,多样支付,10路端口,安全保护
  18. IDEA,git单个指定文件分支间合并
  19. 1028 人口普查(C语言)
  20. 【科研绘图】PS绘制封面中神奇的放大效果

热门文章

  1. 初学Java Web(6)——JSP学习总结
  2. 图解JVM垃圾回收算法
  3. Java 序列化Serializable详解(附详细例子)
  4. 三层架构和MVC模式
  5. 用 LaTeX 写漂亮学位论文
  6. Python运行报错IndentationError: unindent does not match any outer indentation level
  7. 让书写的Matlab代码运行更快 Recipes for Faster Matlab Code
  8. 压缩感知(Compressive Sensing)学习之(一)
  9. 记一例 ORA-00904:标识符无效
  10. [十三]JavaIO之PushBackInputStream