文章目录

  • MyBatis架构
  • 接口层--和数据库交互的方式
    • 使用传统的MyBatis提供的API
    • 使用Mapper接口
  • 数据处理层
    • 参数映射和动态SQL语句生成
    • SQL语句的执行以及封装查询结果集成List
  • 框架支撑层
  • 引导层
  • 主要构件及其相互关系

MyBatis架构

MyBatis框架整体设计如下:

接口层–和数据库交互的方式

MyBatis和数据库的交互有两种方式:

  • 使用传统的MyBatis提供的API
  • 使用Mapper接口

使用传统的MyBatis提供的API

这是传统的传递Statement Id和查询参数给SqlSession对象,使用SqlSession对象完成和数据库的交互;MyBatis提供了非常方便和简单的API,供用户实现对数据库的增删改查数据操作,以及对数据库连接信息和MyBatis自身配置信息的维护操作。

上述使用MyBatis的方法,是创建一个和数据库打交道的SqlSession对象,然后根据Statement Id和参数来操作数据库,这种方法固然简单和实用,但是它不符合面向对象语言的概念和面向接口编程的编程习惯。由于面向接口的编程是面向对象的大趋势,MyBatis为了适应这一趋势,增加了第二种使用MyBatis支持接口(Interface)调用的方式。

使用Mapper接口

MyBatis将配置文件中的每一个<mapper>节点抽象为一个Mapper接口,而这个接口中声明的方法和跟<mapper>节点中的<select|update|delete|insert>节点项对应,Mapper接口和Mapper.xml配置文件之间的对应关系如下

<select|update|delete|insert>节点的id值为Mapper接口中的方法名称,parameterType值表示Mapper对应方法的入参类型,而resultMap值则对应了Mapper接口表示的返回值类型或者返回结果集的元素类型。

根据MyBatis的配置规范配置好后,通过SqlSession.getMapper(XXXMapper.class)方法,MyBatis会根据相应的接口声明的方法信息,通过一个动态代理机制生成一个Mapper实例,我们使用Mapper接口的某一个方法时,MyBatis会根据这个方法的方法名和参数类型,确定StatementId,底层还是通过SqlSession.select("statementId",parameterObject);或者SqlSession.update("statementId",parameterObject);等等来实现对数据库的操作,MyBatis引用Mapper接口这种调用方式,纯粹是为了满足面向接口编程的需要,面向接口编程使得用户在接口上可以使用注解来配置SQL语句,这样就可以脱离XML配置文件,实现0配置。

数据处理层

数据处理层是MyBatis的核心,主要完成两个功能:

  • 通过传入参数构建动态SQL语句
  • SQL语句的执行以及封装查询结果集成List<E>

参数映射和动态SQL语句生成

动态语句生成可以说是MyBatis框架非常优雅的一个设计,MyBatis通过传入的参数值,使用Ognl来动态的构造SQL语句,使得MyBatis有很强的灵活性和扩展性。
参数映射指的是对于java数据类型和jdbc数据类型之间的转换:这里包括两个过程:查询阶段,我们要将java类型的数据,转换成jdbc类型的数据,通过preparedStatement.setXXX()来设置;另一个就是对resultSet查询结果集的jdbcType数据转换成java数据类型。

SQL语句的执行以及封装查询结果集成List

动态SQL语句生成之后,MyBatis将执行SQL语句,并将可能返回的结果集转换成List<E>列表。MyBatis在对结果集的处理中,支持结果集关系一对多和多对一的转换,并且有两种支持方式,一种为嵌套查询语句,还有一种是嵌套结果集的查询。

框架支撑层

  • 事务管理机制
    事务管理机制对于ORM框架而言是不可缺少的一部分,事务管理机制的质量也是考量一个ORM框架是否优秀的一个标准。

  • 连接池管理机制
    由于创建一个数据库连接所占用的资源比较大,对于数据吞吐量大和访问量非常大的应用而言,连接池的设计就显得非常的重要。

  • 缓存机制
    为了提高数据利用率和减小服务器和数据库的压力,MyBatis会对于一些查询提供绘会话级别的数据缓存,会将某一次查询,放置到sqlSession中,在允许的时间间隔内,对于完全相同的查询,MyBatis会直接将缓存结果返回给用户,而不用再到数据库中查找。

  • SQL语句的配置方式
    传统的MyBatis配置SQL语句方式就是使用XML文件进行配置的,但是这种方式不能很好的支持面向接口编程的理念,为了支持面向接口编程,MyBatis引入了Mapper接口的概念,面向接口的引入,对使用注解来配置SQL语句成为可能,用户只需要在接口上添加必要的注解即可,不用再去配置XML文件了,但是,目前的MyBatis只是对注解配置SQL语句提供了有限的支持,某些高级功能还是要依赖XML配置文件配置SQL语句。

引导层

引导层是配置和启动MyBatis配置信息的方式,MyBatis提供两种方式来引导MyBatis:基于XML配置文件的方式和基于Java API的方式。

主要构件及其相互关系

主要构件和关系如下:

主要的核心部件解释如下:

  • SqlSession:作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能。
  • Executor:MyBatis执行器,是MyBatis调度的核心,负责SQL语句的生成和查询缓存的维护
  • StatementHandler:封装了JDBC Statement操作,负责对JDBC Statement(Statement用于执行静态SQL并返回它所生成结果的对象)的操作,如设置参数、将Statement结果集转换成List集合。
  • ParameterHandler:负责对用户传递的参数转换成JDBC Statement所需要的参数
  • ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
  • TypeHandler:负责Java数据类型和jdbc数据类型之间的映射和转换
  • MapperedStatement:维护了一条<select|update|delete|insert>节点的封装
  • SqlSource:负责根据用户传递的parameterObject,动态的生成SQL语句,将信息封装到BoundSql对象中,并返回
  • BoundSql:表示动态生成的SQL语句以及相应的参数类型
  • Configuration:MyBatis所有的配置信息都维护在Configuration对象之中。

感谢并参考

https://pdai.tech/md/framework/orm-mybatis/mybatis-y-arch.html

MyBatis--总体框架设计相关推荐

  1. MyBatis的架构设计以及实例分析--转

    原文地址:http://blog.csdn.net/luanlouis/article/details/40422941 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单 ...

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

    MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例, ...

  3. 《机械制造业智能工厂规划设计》——3.3 机械制造业智能工厂总体框架

    3.3 机械制造业智能工厂总体框架 机械制造业智能工厂的总体框架如图3.8所示.在信息物理融合系统的CPS的支持下,构建智能设计.智能产品.智能经营.智能服务.智能生产.智能决策六大系统.通过企业信息 ...

  4. 《机械制造业智能工厂规划设计》——第3章 机械制造业智能工厂的总体框架 3.1 智能制造的通用定义和特征...

    第3章 机械制造业智能工厂的总体框架 3.1 智能制造的通用定义和特征 1.智能制造的定义和内涵 智能制造系统(Intelligent Manufacturing System,IMS)是一种由智能机 ...

  5. 前沪江高级架构师学习笔记分享:分布式框架设计与实现

    1.分布式服务框架设计 分布式服务框架一般可以分为以下几个部分, (1)RPC基础层: 包括底层通信框架,如NIO框架.通信协议,序列化和反序列化协议, 以及在这几部分上的封装,屏蔽底层通信细节和序列 ...

  6. 《精通自动化测试框架设计》目录—导读

    作者简介 精通自动化测试框架设计 陈冬严,浙江大学硕士,具有10年软件测试和团队管理的工作经验,先后服务于ITSM.PLM软件研发企业,现就职于某金融行业核心机构IT规划部门.业余时间喜欢园艺. 邵杰 ...

  7. ROS探索总结(一)(二)(三):ROS总体框架 ROS总体框架 ROS新手教程

    ROS探索总结(一)--ROS简介 一.历史 随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求原来越强烈,而已有的开源机器人系统又不能很好的适应需求.2010年Willow Garage公 ...

  8. 城市大脑标准体系与评价指标总体框架研究

    来源:城市大脑全球标准研究组 根据城市大脑标准的前期研究和中国指挥与控制学会(CICC)<城市大脑建设规范>标准启动会的专家意见,形成城市大脑标准体系与评价指标总体框架(如图1所示),供各 ...

  9. Socket开发框架之框架设计及分析

    虽然在APP应用.Web应用.Winform应用等大趋势下,越来越多的企业趋向于这些应用系统开发,但是Socket的应用在某些场合是很必要 的,如一些停车场终端设备的接入,农业或者水利.压力监测方面的 ...

  10. orm框架设计、分析与开发

    orm框架设计.分析与开发 前面写过几篇文章介绍和分析mybatis,今天拆解下要设计一个ORM框架涉及到哪些方面,如何用现有的一些已知工具像spring jdbc.freemarker等重新造一个O ...

最新文章

  1. 求两个字符串的最长公共子串
  2. C++中对多态的理解
  3. 2019年春运贵州道路客运预计达6700万人次
  4. 献策企业:制定优秀移动化企业七步骤
  5. Library Monkey Pro for Mac(专业的音频控制整理工具)
  6. Linux内核调用SPI平台级驱动_实现OLED的显示功能
  7. BootstrapTable 表格 checkbox 和 显示行号
  8. 极坐标t1t2几何意义_关于极坐标
  9. ffmpeg所有的解码器(decoders)
  10. 彻底删除的视频怎么恢复?找回丢失的视频有3种方式
  11. C语言键盘各键对应的键值
  12. win7浏览器主页修改不过来_win7无法修改ie浏览器主页的解决方法
  13. 第 4 代 4 端口 HDMI/DVI 分配器龙迅LT86104SXE
  14. C++ 中transform方法的疑惑和自己的感受
  15. ERROR: torch-1.6.0+cu101-cp37-cp37m-win_amd64.whl is not a supported wheel on this platform.
  16. 电子烟市场Juul来袭,锐刻福禄们该如何做防?
  17. 错误跳转html页面模板,404错误页面模板代码大全 - 搜外SEO问答
  18. 2.3 数据库-深入理解
  19. 软件测试基础知识学习
  20. 10.1 快乐,自费送几本豆瓣9.0高分书籍

热门文章

  1. 大数据NiFi(五):NiFi分布式安装
  2. java 创建dat文件怎么打开,dat文件怎么打开有哪些
  3. 【原理】极大似然法(MLE)——概率论在统计学的应用
  4. vue webRTC播放海康摄像头实时画面延迟1s内
  5. EZView如何与网络视频录像机语音对讲
  6. LabView_使用 Vision Acquisition 采集工业相机图像
  7. 搞懂零拷贝这一篇文章就够了
  8. 线性恒流芯片:X5131G可替代SM2082
  9. shp文件的解析方法
  10. 删除u盘插拔记录linux,Linux清除U盘(USB)使用记录