当前位置: 首页 > news >正文

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

      • 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 {@Resourceprivate SysUserMapper sysUserMapper;@Overridepublic 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数据库操作
  • 具体怎么操作的后续再进行介绍

相关文章:

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

0. 前言1. Spring对SqlSessionTemplate的管理1.1. SqlSessionTemplate的创建:1.2. MapperProxy中sqlSession的来源:2. SqlSessionInterceptor中的getSqlSession0. 前言 众所周知😏:MyBatis通过SqlSessionFactory 创建SqlSession去调用Executo…...

女生做大数据有发展前景吗?

当前大数据发展前景非常不错,且大数据领域对于人才类型的需求比较多元化,女生学习大数据也会有比较多的工作机会。大数据是一个交叉学科涉及到的知识量比较大学习有一定的难度,女生比较适合大数据采集和大数据分析方向的工作岗位。 大数据采…...

Git实用指令记录

config 用例:对git最先要做的一个操作就是配置用户名和邮箱,否则无法commit查看所有可以config的条目,非常之多$ git config --list core.symlinksfalse core.autocrlftrue core.fscachetrue color.interactivetrue color.uiauto help.forma…...

复杂美公链技术重要特色:平行公链架构

复杂美公链技术Chain33从11月开源至今,获得众多合作方的认可,其中首创的平行公链架构被百度、阿里、360等机构认可并跟进研究,这也说明了平行公链或许是区块链普及应用的重要解决方案之一。 平行公链(以下简称平行链)是…...

Java——进制转换的一些内容

Java——进制转换的一些内容1.16进制字符串String转字节数组byte[]2.16进制字符串String转10进制数字int3.字节数组byte[]转字符串String4.16进制字符串String-->byte[]-->String(使用ByteBuffer转换)5.字节数组byte[]转字符数组char[]6.字节byte转…...

使用 Nodejs、Express、Postgres、Docker 在 JavaScript 中构建 CRUD Rest API

让我们在 JavaScript 中创建一个 CRUD rest API,使用:节点.js表达续集Postgres码头工人码头工人组成介绍这是我们将要创建的应用程序架构的架构:我们将为基本的 CRUD 操作创建 5 个端点:创造阅读全部读一个更新删除我们将使用以下…...

电子招标采购系统源码之什么是电子招投标系统?

随着互联网时代的到来,各行业都受到不同的影响,其中招投标行业也不例外。为了顺应互联网潮流的发展,电子招投标逐渐取代传统的纸质的招投标方式,给招标方、投标方、招标代理等各方也带来了前所未有的机遇与挑战。那么什么是电子招…...

匹配文件名称模块glob和fnmatch

匹配文件名称模块glob 1.概述 glob模式规则与re模块的正则表达式规则不大相同,glob模块遵循标准的UNIX路径扩展规则。 fnmatch模块用于根据glob模式比较文件名 2.glob表达式匹配文件名 2.1.测试文件 介绍glob配置规则前,先使用下面的代码创建测试文…...

day12_oop

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、继承 三、重写 四、this和super 五、访问修饰符 零、 复习昨日 局部变量和成员变量什么区别 位置,作用域,初始值,内存位置,生命周期 构造方法…...

在 Flutter 中使用 webview_flutter 4.0 | js 交互

大家好,我是 17。 已经有很多关于 Flutter WebView 的文章了,为什么还要写一篇。两个原因: Flutter WebView 是 Flutter 开发的必备技能现有的文章都是关于老版本的,新版本 4.x 有了重要变化,基于 3.x 的代码很多要重…...

嵌入式ARM工业边缘计算机BL302的CAN总线接口如何设置?

CAN 接口如图所示,输入如下命令: ifconfig -a //查看所有网卡 如果 FlexCAN 驱动工作正常的话就会看到 CAN 对应的网卡接口,如图。从图中可 以看出,有一个名为“can0”的网卡,这个就是 BL302 板上的 CAN1 接口对应的 c…...

Win11系统如何安装Ubuntu20.04(WSL版本)并安装docker

终于还是下定决心去换电脑了……这次采用轻量级的WSL,发现虽然没有占内存的GUI界面,但是编码和阅读文档还是非常nice的 1、首先开启Win11的虚拟机服务 2、下载你期望的Ubuntu服务器(这里以20.04为例) 安装成功后,发现…...

Elasticsearch和Solr的区别

背景:它们都是基于Lucene搜索服务器基础之上开发,一款优秀的,高性能的企业级搜索服务器。(是因为他们都是基于分词技术构建的倒排索引的方式进行查询)开发语言:java语言开发诞生时间:Solr2004年…...

如何在北京买房

首先我陈述一点,如果为了买房后再卖掉赚取差价,我这篇文章也许不适合,我这篇文章为整体愿景的发展而设计,为可操作房产的买卖而操作。 买房的愿景: 首先,我们要以一种心态来买房。那就是以始为终的态度&am…...

使用Proxifier+burp抓包总结

一、微信小程序&网页抓包 1. Proxifier简介 Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。 2. 使用Proxifier代理抓包 原理:让微信相关流量先走127.0.0.1:80到burp。具体…...

安装华为aab包的处理方式

1、转换 aab包 为 apks 说明: 1、bundletool-all-1.11.2.jar 转换文件的工具 2、a.aab aab源文件 3、xxx.apks 导入的文件以及路径(例如:D:\Android\xxx.apks) 4、–ksxxxx.jks 该aab打包所需的jsk文件 5、三条命令为 jsk打包所…...

Word处理控件Aspose.Words功能演示:使用 C++ 将 RTF 文档转换为 PDF

Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外,API支持所有流行的Word处理文件…...

【Java|多线程与高并发】进程与线程的区别与联系

文章目录什么是进程什么是线程上下文切换多线程一定比串行执行快吗进程与线程的区别与联系什么是进程 进程的定义:进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU(寄存器),IO,内存&a…...

K8s手工创建kubeconfig

我们通过 kubectl 命令行连接 k8s apiserver 时需要依赖 kubeconfig 文件。 kubeconfig 文件通常包含了 context(上下文)列表,每个 context 又会引用 cluster 和 user,最后通过 current-context 指定当前 kubeconfig 使用哪个 con…...

【SQL开发实战技巧】系列(十七):时间类型操作(下):确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数

系列文章目录 【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧…...

JVM中的各种垃圾回收算法

什么情况下JVM内存中的一个对象被垃圾回收被哪些变量引用的对象是不能回收的?JVM使用了一种可达性算法来判断哪些对象可以被回收哪些对象不可以被回收。这个算法的意思,就是说对每个对象,都分析一下有谁在引用他,然后一层一层去判…...

3.23-3.25笔记

这期实现温湿度采集、光照强度监测、智能设备控制(加湿器、PWM 调光 LED、PWM 调速风扇)确定引脚,根据原理图找出可以使用的引脚开关。根据手册信息PWM口GPIO0_D0和GPIO0_C6,把设备树GPIO0_D0做5G的复位disable,再加入…...

微软服软!被骂5年的Win11将被“整改”:告别强制更新、减少Copilot、任务栏摆放自由

整理 | 屠敏出品 | CSDN(ID:CSDNnews)Windows 11 自 2021 年发布以来,因任务栏功能缩水、UI 不统一、强制网络登录以及更高的硬件门槛,成为用户集中吐槽的焦点。再加上近来微软猛推 AI 功能,Copilot 的入口…...

美军“转正”美科技公司AI系统,专家解读

来源:环球时报【环球时报报道 记者 刘扬】据路透社等外媒近日报道,五角大楼将把美国科技公司Palantir的人工智能(AI)系统Maven列为“正式在编项目”,使美军多军种将该公司的相关技术用于军事领域。五角大楼强调&#x…...

Spring Boot 3.0 + Vue 3 实战:手把手教你搭建图书管理系统(附完整源码)

Spring Boot 3.0 Vue 3 全栈实战:现代化图书管理系统开发指南 在当今快速发展的互联网时代,掌握前后端分离开发技术已成为中级开发者必备的核心竞争力。本文将带你从零开始,使用Spring Boot 3.0和Vue 3这两个当下最热门的技术栈,…...

MMC级联H桥仿真图解析:电压电流双闭环控制策略研究

MMC,级联H桥仿真图,电压电流双闭环。最近在搞MMC(模块化多电平换流器)的仿真,发现这玩意儿真是电力电子界的乐高——全靠子模块堆叠。特别是级联H桥的结构,玩电压合成比搭积木刺激多了。今天咱们就着电压电…...

基于ChatGPT的文字冒险游戏开发实战:从对话引擎到状态管理

背景痛点:当传统文字游戏遇上AI叙事革命 文字冒险游戏(Interactive Fiction, IF)有着悠久的历史,从早期的《巨洞冒险》到后来的《80天》,其核心魅力在于通过文字构建一个充满想象力的世界,让玩家通过输入指…...

解锁Navicat密码:突破加密限制的开源解密工具

解锁Navicat密码:突破加密限制的开源解密工具 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt 当数据库连接密码被Navicat加密保存却无法记起&…...

纺织抗菌,选对材料才关键

在纺织行业中,抗菌消臭性能是提升产品附加值的核心抓手,其中贴身衣物、家纺等贴身类产品,因长期接触人体或所处环境特性,细菌滋生、异味残留等问题尤为突出。DN128抗菌消臭剂作为高效无机消臭材料,可广泛用作面料及家纺…...

热门 PyPI 包 LiteLLM 遭投毒,窃取凭据和认证令牌

聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士专栏供应链安全数字化时代,软件无处不在。软件如同社会中的“虚拟人”,已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为当今社会的…...