IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> mybatis的详细执行流程 -> 正文阅读

[Java知识库]mybatis的详细执行流程


1、Resource获取加载全局配置文件

Resources是ibatis.io包下面的类,也就是一个io流,用于读写文件,通过getResourceAsStream把xml文件加载进来,把配置文件解析为一个流。
image-20210716222401348

2、实例化SQLSessionBuild构造器

我们首先new了一个SqlSessionFactoryBuilder对象,他是SqlSessionFactory的构建者。
image-20210716222506251

3、解析配置文件流XMLConfigBuilder

我们调用了他的build()方法。在utils类中调用了build方法,让我们细查源码进去查看到底长什么样子?
image-20210716222820064
再向下查看,发现在进行xmlConfigBuild
image-20210716222858306

4、Configuration所有的配置信息

通过调用parse()方法解析mybatis配置文件
image-20210716223754834

然后,我们发现parse()解析完成后,他返回了一个configuration对象,它是用来存放mybatis核心配置文件解析完成后的结果。这个configuration又返回给谁了呢?继续看源码:
image-20210716223614008

5、SqlSessionfactory实例化

通过上面一步DefaultSqlSessionFactory()才真正获取到了一个SQLSessionFactory对象,将对象返回到了我们所编写的Utils工具类中的代码
image-20210716224209404

6、Transaction事务管理

接着我们调用openSession获取SQLSession对象,我们来看看openSession方法里有什么?
image-20210716225554392image-20210716230735391
看源码先看到返回值是sqlSession,再看看里面有些什么:

Transaction,这很明显是一个事务,我们都知道sql执行时都要涉及到事务操作的,提交或回滚什么的。而这个transaction产生需要什么参数呢,看源码知道里面有个environment(xml中配置的),而且是从configuration中获得的(之前做的总算没有白费),通过这些参数transactionFactory就帮我们产生了transaction。

7、创建executor执行器

继续剖析源码观察发现,接着又创建了一个executor执行器,executor执行器在mybatis中发挥着十分重要的作用。executor,这个名字一看就知道是一个执行器,是个接口(一般用SimpleExecutor来执行,实现类),他是mybatis的核心执行器,相当于jdbc中的statement,发送sql语句并执行。

有了这些我们就能得到最后的sqlSession了。
image-20210716231010468

8、创建SQLSession

image-20210716231150713
image-20210716231241934

9、jdk动态代理生成mapper接口的代理对象

主要通过DefaultSqlSession的getMapper()来生成。

首先看一看test类中的方法,通过调用了一个getmapper的方法

image-20210716231642310

细查代码首先到达的是SqlSession.class文件下的一个接口类

image-20210716231618892

接着查看他的DefaultSqlSession.class接口实现类发现,也是调用了一个getMapper的方法,然后返回了一个对象。让我们接着向下查看

image-20210716231752468

接着发现到了Configuration.class的文件下

image-20210717223005573

接着就到了MapperRegistry.class下,可以发现其实是通过mapperRegistry的对象,它里面是一个knownMappers的HashMap,用于存储配置文件中的mappers标签的每个mapper接口

image-20210717222316852
这里通过JDK动态代理,帮mapper接口生成代理实现类
image-20210717223851321
image-20210717223920636

10、Mapper对象调用执行用户方法

image-20210717224539971
Mapper对象调用方法执行其实走的是MapperProxy的invoke方法
image-20210717224639881

11、在执行增删改查成功的前提下,提交事务,未成功,则需要回滚事务

12、关闭SQLSession

其实在方法执行的时候还应该有更为详细的步骤,还要注意缓存的的存在,一级缓存会自动开启,二级缓存需要手动开启,在执行方法时首先要查看二级缓存中是否有对应的结果,然后查看一级缓存后,没有则再进行数据库访问,接着关闭数据库连接,返回到数据库池中,然后取到了结果就需要执行最后一步关闭SqlSession。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 14:00:25  更:2021-07-22 14:00:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 21:42:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码