当前位置:首页 > 经验 >

mybatis工作原理及流程(mybatis工作原理及讲解)

来源:原点资讯(www.yd166.com)时间:2022-10-29 11:43:55作者:YD166手机阅读>>

配置好后,MyBatis 会根据接口声明的方法信息,通过动态代理机制生成一个Mapper 实例,当调用接口方法时,根据这个方法的方法名和参数类型,确定statement Id,底层还是通过 SQLSession.select/update( “statementId”, parameter) 等来实现对数据库的操作。

数据处理层

数据处理层:可以说是MyBatis 的核心,负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等,它主要的目的是根据调用的请求完成一次数据库操作。

mybatis工作原理及流程,mybatis工作原理及讲解(5)

从大的方面上讲,它要完成两个功能:

  • 通过传入参数构建动态sql语句
  • SQL语句的执行以及封装查询结果集
1.通过传入参数构建动态SQL语句

动态语句生成能够说是MyBatis框架很是优雅的一个设计,MyBatis 经过传入的参数值,使用 Ognl 来动态地构造SQL语句,使得MyBatis 有很强的灵活性和扩展性。

参数映射指的是对于Java 数据类型和jdbc数据类型之间的转换,这里有包括两个过程:

  • 查询阶段
  • 查询结果集转换阶段

查询阶段要将java类型的数据,转换成jdbc类型的数据,经过 preparedStatement.setXXX() 来设值;

另外一个就是对resultset查询结果集的jdbcType 数据转换成java 数据类型。

2. SQL语句的执行以及封装查询结果集

动态SQL语句生成以后,MyBatis 将执行SQL语句,并将可能返回的结果集转换成List<E> 列表。

MyBatis 在对结果集的处理中,支持结果集关系一对多和多对一的转换,而且有两种支持方式,一种为嵌套查询语句的查询,还有一种是嵌套结果集的查询。

基础支撑层

基础支撑层是整个MyBatis框架的地基,负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件,为上层的数据处理层提供最基础的支撑。

mybatis工作原理及流程,mybatis工作原理及讲解(6)

1.缓存机制

数据库是实践生成中非常核心的存储,很多业务数据都会落地到数据库,所以数据库性能的优劣直接影响了上层业务系统的优劣。

我们很多线上业务都是读多写少的场景,在数据库遇到瓶颈时,缓存是最有效、最常用的手段之一,正确使用缓存可以将一部分数据库请求拦截在缓存这一层,这就能够减少一部分数据库的压力,提高系统性能。

mybatis工作原理及流程,mybatis工作原理及讲解(7)

除了使用 Redis、Memcached 等外置的第三方缓存以外,持久化框架一般也会自带内置的缓存,例如,MyBatis 就提供了一级缓存和二级缓存,具体实现位于基础支撑层的缓存模块中。

2.反射工具

该模块对 Java 原生的反射进行了良好的封装,提供了更加简洁易用的 API ,方便上层使调用,并且对反射操作进行了一系列优化,例如缓存了类的元数据,提高了反射操作的性能。

3.类型转换

类型转换模块提供了两个主要功能,一个功能是别名机制,MyBatis 为了简化配置文件提供了别名机制。

另一个功能是实现 JDBC 类型与 Java 类型之间的转换,该功能在为 SQL 语句绑定实参以及映射查询结果集时都会涉及。

4.日志

提供详细的日志输出信息,并且能够集成多种日志框架,其日志模块的一个主要功能就是集成第三方日志框架。

5.资源加载

资源加载模块主要是对类加载器进行封装,确定类加载器的使用顺序,并提供了加载类文件以及其他资源文件的功能。

6.解析器

解析器模块主要提供两个功能,一个功能是对 XPath 进行封装,为 MyBatis 初始化时解析 mybatis-config.xml 配置文件以及映射配置文件提供支持。

另一个功能是为处理动态 SQL 语句中的占位符提供支持。

7.事务管理

持久层框架一般都会提供一套事务管理机制实现数据库的事务控制,MyBatis 对数据库中的事务进行了一层简单的抽象,提供了简单易用的事务接口和实现。

一般情况下,Java 项目都会集成 Spring,并由 Spring 框架管理事务。

8.Binding

在调用 SqlSession 相应方法执行数据库操作时,需要指定映射文件中定义的 SQL 节点,如果出现拼写错误,我们只能在运行时才能发现相应的异常。为了尽早发现这种错误,MyBatis 通过 Binding 模块将用户自定义的 Mapper 接口与映射配置文件关联起来,系统可以通过调用自定义 Mapper 接口中的方法执行相应的SQL 语句完成数据库操作,从而避免上述问题。

需要注意的是,开发人员无须编写自定义 Mapper 接口的实现,MyBatis 会自动为其创建动态代理对象。

9.数据源

对于 ORM 框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题。

数据库连接是一项有限的昂贵资源,一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的性能低下。

数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态地对池中的连接进行申请、使用和释放。

打开Mybatis源码找到datasource包下就可以看到连接池的实现,如下图所示:

mybatis工作原理及流程,mybatis工作原理及讲解(8)

栏目热文

国产汉斯格雅怎么样(汉斯格雅正品价格怎样购买)

国产汉斯格雅怎么样(汉斯格雅正品价格怎样购买)

写在前面“支持国货”的口号我们每个人都已经听过很多遍。尤其是在汽车工业领域,大家一次次地支持国货,最终却又一次次的“败兴...

2022-10-29 11:48:45查看全文 >>

汉斯格雅如何鉴别真假(如何鉴别汉斯格雅真伪)

汉斯格雅如何鉴别真假(如何鉴别汉斯格雅真伪)

马桶是人们现代生活中常见必备的卫浴陶瓷用品之一,产品品质不仅决定了使用的安全性,也决定了产品的效率等多方面,随着卫浴市场...

2022-10-29 12:11:43查看全文 >>

汉斯格雅好用么(国产的汉斯格雅能买吗)

汉斯格雅好用么(国产的汉斯格雅能买吗)

之前买花洒,我都是按价位随便选的,导致后期使用时问题百出:不耐脏、掉漆严重、洗澡舒适度欠佳等等。所以,这一次再装修,我花...

2022-10-29 11:55:13查看全文 >>

汉斯格雅哪个系列最好(汉斯格雅系列对比)

汉斯格雅哪个系列最好(汉斯格雅系列对比)

魔都的夏天简直会要人命,下班回家就想钻到浴室里不出来。舒适地洗个热水澡,幸福感瞬间提升100倍呀!那么问题来了,怎么选择...

2022-10-29 11:57:29查看全文 >>

汉斯格雅价位(汉斯格雅为什么有贵也有便宜的)

汉斯格雅价位(汉斯格雅为什么有贵也有便宜的)

卫生间的装修做得好不好是非常重要的,而且卫生间也是我们使用频率比较高的地方,直接影响着我们日后的家居幸福度。不论是新房装...

2022-10-29 11:48:57查看全文 >>

27道经典mybatis面试题(最经典的35个面试问题)

27道经典mybatis面试题(最经典的35个面试问题)

什么是 Mybatis?MyBatis 的优点MyBatis 框架的缺点MyBatis 框架适用场合MyBatis 与 ...

2022-10-29 12:09:20查看全文 >>

mybatis框架快速入门(学习mybatis框架需要什么基础教程)

mybatis框架快速入门(学习mybatis框架需要什么基础教程)

MyBatis 框架概述MyBatis 框架:MyBatis 本是apache 的一个开源项目 iBatis, 2010...

2022-10-29 11:32:56查看全文 >>

mybatis工作原理通俗易懂(MyBatis从入门到精通)

mybatis工作原理通俗易懂(MyBatis从入门到精通)

废话不多说,直接进入文章。我们在使用Mybatis的时候,会在xml中编写SQL语句。如图:那么,MyBatis底层是如...

2022-10-29 11:36:56查看全文 >>

mybatis通俗讲解(mybatis中的基础知识和快速入门)

mybatis通俗讲解(mybatis中的基础知识和快速入门)

版权声明:本文为CSDN博主「$码出未来」的原创文章原文链接:https://blog.csdn.net/yuansha...

2022-10-29 11:48:11查看全文 >>

mybatis一级缓存和二级缓存(mybatis一级缓存和二级缓存的关系)

mybatis一级缓存和二级缓存(mybatis一级缓存和二级缓存的关系)

mybatis缓存机制mybatis包含缓存机制,恶意方便的配置和定制。默认定义了一级缓存和二级缓存。默认情况下,只有一...

2022-10-29 11:57:14查看全文 >>

文档排行