【Mybatis】3 的操作类型对象

前言知识汇总


上篇文章中我们已经详细介绍了Mybatis的存储类对象。我们上篇提到了:

Mapper.xml当中的SQL标签都被解析成了一个一个的MappedStatement对象。那么我们当中的SQL是基于什么形式进行封装的呢?

我们要知道,Java当中一切皆对象。MappedStatement当中SQL被封装成了MappedStateMent当中的SqlSource对象。

我们通过sqlSource.getBoundSql()来获取一个BoundSql对象,BoundSQL当中的对象就是对于SQL语句的真实封装。

Cofiguration也好,MappedStatent也好存储的是我们配置文件或者是在注解当中书写的配置信息。它们是一个存储对象。
我们还要有操作类型的对象。

一:操作类型对象

Executor

在 MyBatis 中,Executor 是一个重要的接口,它负责执行存储在映射器文件中的 SQL 语句,以及处理结果集。Executor 接口定义了对 SQL 语句的执行和处理,是 MyBatis 中执行数据库操作的核心组件之一。

主要作用

Executor 接口的主要作用包括以下几个方面:
1. 执行 SQL 语句:Executor 负责执行映射器文件中配置的各种 SQL 语句,包括查询、插入、更新、删除等操作。
2. 缓存处理:Executor 可以对 SQL 语句执行的结果进行缓存处理,提高重复查询的性能。
3. 结果集处理:Executor 负责将数据库返回的结果集处理成 Java 对象或基本数据类型,以便应用程序进一步处理和展示。

主要实现

在 MyBatis 中,Executor 接口有三个主要的实现类:


- SimpleExecutor:SimpleExecutor 是 Executor 接口的简单实现,它对每个 SQL 语句的执行创建一个新的 Statement 对象,并直接执行 SQL 语句,适用于较为简单的数据库操作场景。
- ReuseExecutor:ReuseExecutor 是 Executor 接口的复用实现,它会重用 Statement 对象,减少 SQL 语句执行的开销,适用于需要频繁执行 SQL 语句的场景。

BatchExcutor是一个批处理的执行器,我们知道在JDBC当中就有批处理的操作,如果我们想再JDBC当中仍然有批处理的操作。使用这个BatchExcutor即可。也就是一个Connection处理一坨SQL语句,我们就可以考虑使用这个执行器了。

值得注意的是最常用的执行器往往是最简单的这个:SimpleExecutor,完成常规的操作,这个是最核心的Excutor,这要是Mybatis当中内置推荐的执行器。如果我们不更改配置的话,默认使用的就是Configuration当中的简单的Excutor

总体来说,Executor 在 MyBatis 中起着承担着执行 SQL 语句和处理结果集的重要角色,它通过不同的实现方式,能够满足不同场景下的数据库操作需求,并在一定程度上提高了数据库访问的性能。

Configuration三个功能:封装Mybatis-Config.xml,存储MappedStatement,创建其他的核心执行的对象包括Excutor,所以配置肯定也在这个类里边。

ReuseExcutor这是一个复用Excutor,他复用的是Statement。我们说任何对数据库的操作底层都得用JDBC,JDBC中的三大件东西Connection是连接数据库的ResultSet是获取查询结果集的,真正和数据库交互的是Statement。复用Statement在什么条件下会发生呢?
Statement与什么想关呢?Statement是与SQL语句相关的。如果我们的SQL在任何条件下都不会改变的话,我们这样的话就可以一直使用这个Statement对象,减少了对象的创建,保证了性能。
这个SQL语句的话可以是增删改查任何的语句,但是不能有任何的改变,任何的改变的话,就不适用了。

补充知识点

JDBC当中的批处理是啥意思?
我们最简单的JDBC是获取一个Connection之后,我们直接获取一个Statement对象,然后拿着这个对象和数据库沟通,然后取到结果集,释放连接。但是这样会有一个问题,需要频繁的有连接的创建和关闭。或者是连接池的获取和归还。
我们想到了批处理,也就是在一个连接之上,与数据库进行多语SQL交互,这样的话我们就省略了大量的Connetion的创建和销毁,这就是批处理,大大提高了性能。
站在Mybatis当中如果我们想要使用批处理的话,我们就可以使用BatchExcutor

为什么说IO,连接都是非常真贵的资源?
我们知道,我们搞Java开发我们底层面临的是OS操作系统的资源,在它之上我们构建了一个Java虚拟机的东西。我们写Java程序是运行在虚拟机层面上的东西,然后我们想要在虚拟机当中去建立网络连接、或者是io、或者是线程的时候,这个时候虚拟机就办不到了,需要去沟通操作系统,因为只有操作系统可以进行读取文件,可以去访问互联网,只有操作系统可以操作CPU操作线程、进程。所以,我们知道这些操作被后都有操作系统,都会有这些native的方法的操作,而这些东西都是耗时和占用资源的,所以我们认为这些东西,必须要管,必须要复用,必须要池化。

Excutor来处理和数据库的操作,那么这个是怎么和JDBC建立连接的呢,这就和后面的对象有关系了。
 


  
 ParameterHandler


   - ParameterHandler 用于处理 SQL 语句中的参数,包括对输入参数的设置和处理。它负责将 Java 对象中的属性值映射到预编译的 SQL 语句中的参数位置上。

ResultSetHandler


   - ResultSetHandler 用于处理查询结果集,将数据库返回的数据转换为 Java 对象或基本数据类型,以便应用程序进行后续的处理和展示。

 StatementHandler


   - StatementHandler 用于处理 SQL 语句的执行,包括对 SQL 语句的组装、参数设置、语句执行和结果集的处理等。它负责实际执行 SQL 语句,并处理各种异常情况。

以上这些操作类型对象一起构成了 MyBatis 框架中数据库操作的基本组成部分,它们协同工作,实现了数据库访问层的抽象和封装,为开发者提供了灵活、高效的数据库访问手段。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人人都会的 Blazor —— 1.3 项目结构

项目结构 使用 Visual Studio 2022 创建 Blazor 项目。 在搜索框中输入【blazor】关键字,将列出以下已经存在的项目模板: Blazor Server App:基于 Blazor Server 托管模型的项目,并建立一些示例代码和组件;Blazor WebAssembly App:基于 Blazor WebAssembly 托管模型的项…

优维低代码实践:打包发布

导语 优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。…

uniapp使用vue3和ts开发小程序自定义tab栏,实现自定义凸出tabbar效果

要实现自定义的tabbar效果,可以使用自定义tab覆盖主tab来实现,当程序启动或者从后台显示在前台时隐藏自带的tab来实现。自定义一个tab组件,然后在里面实现自定义的逻辑。 组件中所使用的组件api可以看:Tabbar 底部导航栏 | uView…

【今天放个大招,带你手把手搭建 Jenkins 的分布式构建】

UI 自动化测试代码写完了以后,会放到 Jenkins 这样的持续集成工具上去构建。 如果 Jenkins 平台是搭建在服务器上,会面临 2 个问题: 第一个问题是 UI 自动化测试需要渲染界面,需要消耗大量的 CPU 和内存资源,如果服务器…

海康Visionmaster-全局脚本:通过全局脚本获取通讯输 入的参数并赋值给全局变量

全局脚本根据外部通讯输入的数值赋值给全局变量,实现输入与全局变量之间的数值绑定。(一般应用于定位、标定等需要外界物理值的场景)。 第一步,在 vm 通讯管理中设置好通讯设备,连接 第二步,根据通讯设备、接收的信息…

如何对非线性【SVM】进行三维可视化

首先导入相应的模块, from sklearn.datasets import make_blobs from sklearn.svm import SVC import matplotlib.pyplot as plt import numpy as np 我们使用make_circles()函数创建散点图,并将散点图中的点的横纵坐标赋值给x,y,其中x是特…

Git中的 fork, clone,branch

一、是什么 fork fork,英语翻译过来就是叉子,动词形式则是分叉,如下图,从左到右,一条直线变成多条直线 转到git仓库中,fork则可以代表分叉、克隆 出一个(仓库的)新拷贝 包含了原来…

奔驰E Coupe 升级鼠标按键 操作简单 完美结合

人机交互系统正是汽车智能化发展的产物,它实现了人与车之间的互联。不知道大家有没有发现,在很多奔驰车的中央扶手箱前,有一块类似于“鼠标”的操作区,它并不是我们常见的换挡杆,而是奔驰研发的独立影音控制系统COMAND…

(11_06)函数计算 FC 3.0 发布,全面降价,最高幅度达93%,阶梯计费越用越便宜

作为国内最早布局 Serverless 的云厂商之一,阿里云在 2017 年推出函数计算 FC,开发者只需编写代码并上传,函数计算就会自动准备好相应的计算资源,大幅简化开发运维过程。阿里云函数计算持续在 Serverless GPU 方面投入研发&#x…

数据结构与算法(Java版) | 排序算法的介绍与分类

各位朋友,现在我们即将要进入数据结构与算法(Java版)这一系列教程中的排序算法这一章节内容的学习中了,所以还请大家系好安全带,跟随我准备出发吧! 相信诸位应该都知道排序算法有很多种吧!就算没…

iPortal如何灵活设置用户名及密码的安全规则

作者&#xff1a;yx 目录 前言 一、配置文件介绍 1、<passwordRules>节点 注意事项&#xff1a; 2、<usernameRules>节点 二、应用实例 1、配置文件设置 2、验证扩展结果 三、结果展示 前言 SuperMap iPortal提供了扩展账户信息合规度校验规则的能力&#…

太坑了,降低 代码可读性的 12 个技巧

工作六七年以来&#xff0c;接手过无数个烂摊子&#xff0c;屎山雕花、开关编程已经成为常态。 下面细数一下 降低代码可读性&#xff0c;增加维护难度的 12 个编码“技巧”。 假设一个叫”二狗“ 的程序员&#xff0c;喜欢做以下事情。 1. 二狗积极拆分微服务&#xff0c;一个…

二.831(KMP)字符串详解

ne[3]枚举2次 ne[4],枚举3次 ne[5],枚举4次]b在后面了,就一个b就不可能在前面了]b舍弃 ne[6],枚举i-1次]一眼看最长相等前后缀,就是aab,aab ne[7],aaba,aaba ne[8],枚举i-1次]aabaa,aabaa 同理 怎么快速看呢!我想把b给夹起来]把中间夹的数越多就多 其实 加的有规律,最…

多级缓存之JVM进程缓存

1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a; 请求要经过Tomcat处理&#xff0c;Tomcat的性能成为整个系统的瓶颈 Redis缓存失效时&#xff0…

【基础IO⑨】:重定向实现原理 “Linux下一切皆文件“

【基础IO⑨】&#xff1a;重定向原理 与 "Linux下一切皆文件" 一.重定向1.实现原理2.输出重定向3.输入重定向4.补充&#xff1a;简易shell中实现重定向 二."Linux下一切皆文件"1.虚拟文件系统(VFS) 一.重定向 我们首先关闭2号文件描述符&#xff0c;然后再…

antv/x6 自定义html节点并且支持动态更新节点内容

antv/x6 自定义html节点 效果图定义一个连接桩公共方法注册图形节点创建html节点动态更新节点内容 效果图 定义一个连接桩公共方法 const ports {groups: {top: {position: top,attrs: {circle: {r: 4,magnet: true,stroke: #cf1322,strokeWidth: 1,fill: #fff,style: {visib…

虚拟机Linux-Centos系统网络配置常用命令+Docker 的常用命令

目录 1、虚拟机Linux-Centos系统网络配置常用命令2、Docker 的常用命令2.1 安装docker步骤命令2.2 在docker容器中安装和运行mysql 2、dockerfile关键字区别(ADD/COPY,CMD/ENTRYPOINT) 1、虚拟机Linux-Centos系统网络配置常用命令 进入网络配置文件目录 cd /etc/sysconfig/ne…

监控actuator配置以及踩坑记录

以前这个监控都是领导去加&#xff0c;我顶多去修改一些时间参数&#xff0c;让我自己加还是头一次 正经踩了不少坑啊 1.依赖引入 先说配置过程 不对 先说我们项目结构 我们有一个common项目&#xff0c;作为一个公共项目。各种项目公用的依赖&#xff0c;都配置在common中…

深度学习中的数据类型介绍:FP32, FP16, TF32, BF16, Int16, Int8 ...

文章目录 0. 前言1. 数据的存储方式2. 不同数据类型介绍2.1 深度学习中常用的数据类型2.2 BF16 类型的优势2.3 不同数据类型的使用场景 0. 前言 相比于 CPU&#xff0c;GPU 在架构设计时将更多的晶体管用于数据处理&#xff0c;而不是数据缓存和流量控制&#xff0c;因此可以高…

关于网站安全的一些讨论

互联网的普及和发展为企业和个人提供了巨大的机会&#xff0c;但同时也伴随着网络安全威胁的增加。网站被攻击是一个常见的问题&#xff0c;可能导致数据泄露、服务中断和声誉受损。在本文中&#xff0c;我们将探讨与网络安全紧密相关的因素&#xff0c;分析为什么网站容易受到…