Mybatis源码(2) - SqlSessionTemplate的介绍及创建过程

news2024/11/25 0:32:28

      • 0. 前言
      • 1. Spring对SqlSessionTemplate的管理
        • 1.1. SqlSessionTemplate的创建:
        • 1.2. MapperProxy中sqlSession的来源:
      • 2. SqlSessionInterceptor中的getSqlSession

0. 前言

  • 众所周知😏:MyBatis通过SqlSessionFactory 创建SqlSession去调用Executor执行器进行JDBC数据库操作
  • SqlSession在Mybatis中有DefaultSqlSession、SqlSessionManagger两种实现,其中SqlSessionManagger是线程安全的
  • SqlSessionTemplate是Mybatis为了接入Spring提供的Bean,也是SqlSession的实现,并且是线程安全的
  • 关于DefaultSqlSession为什么不是线程安全可以参考链接

1. Spring对SqlSessionTemplate的管理

1.1. SqlSessionTemplate的创建:

  • 在自动配置的时候会默认创建SqlSessionTemplate并放入IOC容器中,当然前提我们没有手动去配置这个bean
  • SqlSessionTemplate构造函数中会对SqlSession进行代理,也就是SqlSessionTemplate持有SqlSession的代理对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2. MapperProxy中sqlSession的来源:

  • 上一篇文章:SpringBoot整合Mybatis的核心原理 中介绍到,Mapper接口调用时会触发代理类MapperProxy的invoke方法,而且代理类MapperProxy是持有sqlSession的
  • MapperProxy是持有sqlSession实际就是SqlSessionTemplate
@Service("sysUserService")
public class SysUserServiceImpl implements SysUserService {

    @Resource
    private SysUserMapper sysUserMapper;

    @Override
    public SysUser queryById(Long id) {
        return sysUserMapper.queryById(id);
    }
}

  • 上一篇文章中有介绍到,属性填充sysUserMapper时,会往IOC容器生成MapperFactoryBean,其类图如下
  • 就意味着,生成MapperFactoryBean也会属性填充sqlSessionFactory和sqlSessionTemplate

在这里插入图片描述

  • 所以从容器中的sqlSessionTemplate属性填充到MapperFactoryBean

在这里插入图片描述

  • 所以通过MapperFactoryBean的getObject创建代理对象时,获取的sqlSession就是sqlSessionTemplate

在这里插入图片描述

2. SqlSessionInterceptor中的getSqlSession

  • 上文知道mapper接口的调用最终会通过sqlSessionTemplate进行调用,而sqlSessionTemplate持有sqlSession的代理对象
  • 那么调用的时候就会触发代理类的invoke方法

在这里插入图片描述

  • invoke通过getSqlSession方法拿到DefaultSqlSession实例
  • getSqlSession方法里面处理了sqlSession的线程安全问题(通过ThreadLocal实现)

在这里插入图片描述

  • 由此可见:sqlSessionTemplate并不去参与JDBC数据库操作,实际还是通过DefaultSqlSession来进行JDBC数据库操作
  • 具体怎么操作的后续再进行介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/346359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在VMware17 Pro中设置创建虚拟机Ubuntu 20

在VMware17 Pro中设置创建虚拟机Ubuntu 200 前言1 安装Ubuntu 20步骤0 前言 书接上回,安装好了VMware17 Pro之后,就是安装虚拟机了,前提是下好了系统安装包,以Ubuntu 20为例 1 安装Ubuntu 20步骤 首先点击创建新的虚拟机 新建…

利用NAS免费部署动态解析实现内网穿透

‍ 想要从外网访问家中的NAS等设备,一般来说我们需要知道家中路由器的公网IP。 现在固定的公网IP基本上很难免费申请到了,但是一般来说运营商可以免费提供一个动态变化的公网IP:当路由设备重启时,运营商会给你重新分配一个新的I…

PHP加载3D模型【WebGL】

这是另一篇关于如何使用 PHP加载 3D 模型的文章。 在这里,我使用 Laravel 作为后端及其存储。 我在前端使用 Three.Js 库来渲染和显示 3D 模型。 我将向您展示如何上传 3D 模型以及如何从 Laravel 存储加载 3D 模型。 请仔细完成以下步骤。 大家可以在评论区提出任何…

8Manage PPM项目管理系统独特的功能:项目完整性保护

项目有其内在复杂性(项目管理的科学部分),这种复杂性可以进行划分和克服。项目也有人为的或偶然的复杂性(项目管理的艺术部分),这种复杂性无法进行划分和克服。偶然的高复杂性会影响并使内在复杂性难以管理…

【系统架构设计师】计算机组成与体系结构 ① ( 计算机组成 | CPU | 存储器 | 总线 | IO 外设 | CPU 组成 | 运算器 | 控制器 )

文章目录一、计算机组成与体系结构二、计算机组成结构三、CPU 组成1、运算器2、控制器一、计算机组成与体系结构 计算机组成与体系结构 对应 大学的 计算机组成原理 课程 , 主要分为 : 计算机组成体系结构划分 两大知识板块 ; 在架构师考试时 , 平均分值是 3 分 ; 计算机组成…

三相可控全桥整流与DC Buck变换电路设计仿真问题汇总

目 录 问题 一、开关管没有打开的情况下,DC Buck输出负电压? 二、问题分析 1.输出端存在与母线电压反相的电压,因此可以确定为差模感应电压,如果输出端与母线端产生的是大小相等,方向相同的同相电压,则为共…

大数据框架之Hadoop:HDFS(六)DataNode(面试开发重点)

6.1DataNode工作机制 DataNode工作机制,如下图所示。 1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳…

ROS笔记(4)——发布者Publisher与订阅者Subscribe的编程实现

发布者 以小海龟的话题消息为例,编程实现发布者通过/turtle1/cmd_vel 话题向 turtlesim节点发送消息,流程如图 步骤一 创建功能包(工作空间为~/catkin_ws/src) $ cd ~/catkin_ws/src $ catkin_create_pkg learning_topic roscpp rospy s…

FLStudio水果最新版本V21支持中文语言

FL Studio简称FL,全称:Fruity Loops Studio习惯叫它水果。软件现有版本是FLStudio21,已全面升级支持简体中文语言界面 。FL Studio 能让你的计算机就像是全功能的录音室一样,完成编曲、剪辑、录音、混音等工作,帮助爱好…

2023大厂高频软件测试面试真题(附答案)

一、接口测试面试题:1.接口测试是怎么做的,如何分析数据?接口测试实际跟一般测试不同就是测试用例的设计部分。获取接口规范。设计接口测试功能用例(主要从用户角度出发看接口能否实现业务需求,用例设计就是黑盒用例那…

2022财年净新增1159家门店,百胜中国门店高速扩张背后有何阳谋?

中国最大餐饮企业百胜中国控股有限公司(下称“百胜中国”),2月8日发布了2022年度第四季度及全年未经审核的财务业绩。 从财报数据来看,这家拥有肯德基、必胜客、黄记煌等诸多餐饮品牌的巨头,已经顺利渡过了疫情笼罩下…

计算机网络(第7版)第五章(物理层)知识点整理

计算机网络 参考书目:《计算机网络(第7版)》:谢希仁——电子工业出版社 《精通Windows Sockets网络开发--基于Visual C实现》:孙海民——人民邮电出版社 第五章:物理层计算机网络一、基本概念二、传输媒体…

和数集团打造《神念无界:源起山海》,诠释链游领域创新与责任

首先,根据网上资料显示,一部《传奇》,二十年热血依旧。 《传奇》所缔造的成绩,承载的是多少人的青春回忆,《传奇》无疑已经在游戏史上写下了浓墨重彩的一笔。 相比《传奇》及背后的研发运营公司娱美德名声大噪&#x…

uniapp上高德(百度)地图API的使用(APP安卓)

前言由于在app中没有document,window等对象,所以使用在pc端传统方法引入的方式,将会发现无法引用成功,会出现白屏现象。目前有两种解决方式:使用uniapp的web-view方式(百度地图)使用renderjs来调用document…

【51媒体网】媒体邀约行业诞生及其前景预测

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。一,媒体邀约行业的诞生媒体邀约行业是随着现代社会媒体的普及而逐渐形成的。随着互联网和社交媒体的快速发展,媒体作为信息传播的重要渠道之一,越来越成…

PPP协议实验及配置

PPP协议实验拓扑图PPP认证配置PAP认证CHAP认证接口地址不在一个网段?地址自动协商通过IPCP方式获取到默认路由拓扑图 首先在设备上增添两个Serial接口: PPP认证配置 PAP认证 AR1作为认证方,AR2作为被认证方: AR1&#xff1a…

Flask-SQLAlchemy的安装使用 一对多 多对多join查询

Flask-SQLAlchemy安装及设置 SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升SQLAlchemy是一个关系型数据库框架…

yaml配置文件

最近在写代码,发现随着网络的增加,代码变得越来越冗余,所以就想着写一个网络的配置文件,把网络的配置放到一个文件中,而不再主函数中,这样代码开起来就好看了,调试的时候也方便了。之前写过一篇…

rollback-only异常令我对事务有了新的认识

背景 环境 相关环境配置: SpringBootPostGreSQL Spring Data JPA 问题 两个使用 Transaction 注解的 ServiceA 和 ServiceB,在 A 中引入了 B 的方法用于更新数据 ,当 A 中捕捉到 B 中有异常时,回滚动作正常执行,但…

大数据01-Hadoop3.3.1伪分布式安装

目录Hadoop简介特性先决环境配置下载地址安装VMware创建虚拟机安装VMware Tools共享文件夹安装JavaSSH登录权限设置Hadoop伪分布式安装安装单机版HadoopHadoop伪分布式安装Hadoop WebUI管理界面测试HDFS集群以及MapReduce任务程序学习参考Hadoop 简介 Hadoop是Apache软件基金会…