【Mybatis】3 的操作类型对象

news2024/12/25 13:54:42

前言知识汇总


上篇文章中我们已经详细介绍了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 框架中数据库操作的基本组成部分,它们协同工作,实现了数据库访问层的抽象和封装,为开发者提供了灵活、高效的数据库访问手段。

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

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

相关文章

工业路由器网关的网络协议之NAT技术

在物联网通讯领域,NAT技术能将内网的一个私有IP转换成一个公网IP去接入互联网,解决组建局域网络时私有IP地址无法在公网上进行路由的问题。 NAT(Network Address Translation)的三种方式: 静态NAT 1、一个私有IP对应…

【form校验】3.0项目多层list嵌套

const { required, phoneOrMobile } CjmForm.rules; export default function detail() {const { query } getRouterInfo(location);const formRef useRef(null);const [crumbList, setCrumbList] useState([{url: "/wenling/Reviewer",name: "审核人员&quo…

Cesium 展示——将每个点和点所在线段进行关联

文章目录 需求分析1. 数据结构2. 点线绘制3. ID获取4. 进行关联需求 点的集合和线的集合已知,现需将每个点和每个点所在的关联的线进行关联起来 输入 输出 分析 1. 数据结构 l

Mac平台文件传输工具Transmit 5

Transmit 是一款由Panic开发的文件传输软件,它可以帮助用户在不同的服务器间进行文件传输。Transmit 支持多种协议,包括FTP、SFTP、WebDAV等,同时它也内置了一个强大的文件管理器,可以方便地对文件进行管理和操作。 Transmit 的界…

分享86个节日庆典PPT,总有一款适合您

分享86个节日庆典PPT,总有一款适合您 链接:https://pan.baidu.com/s/1oE2LIr6en4js9L0fzUyqgw?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易。知识付费甚欢…

web —— css(1)

Web —— css基础 1. CSS样式表2. CSS的三种引入方式3. CSS 语法4. CSS 选择器4.1 元素选择器4.2 类选择器4.3 ID选择器4.4 属性选择器4.5 后代选择器4.6 子元素选择器4.7 伪类选择器4.8 分组选择器 5. 颜色和字体6. 显示方式display7. 盒子模型7.1 盒子模型 - 外边距塌陷7.2 盒…

Java之SpringCloud Alibaba【八】【Spring Cloud微服务Gateway整合sentinel限流】

一、Gateway整合sentinel限流 网关作为内部系统外的一层屏障,对内起到-定的保护作用&#xff0c;限流便是其中之- - .网关层的限流可以简单地针对不同路由进行限流,也可针对业务的接口进行限流,或者根据接口的特征分组限流。 1、添加依赖 <dependency><groupId>c…

串口中断(9)即时解析用户自定义通讯协议--接收数据固定情况

本文为博主 日月同辉&#xff0c;与我共生&#xff0c;csdn原创首发。希望看完后能对你有所帮助&#xff0c;不足之处请指正&#xff01;一起交流学习&#xff0c;共同进步&#xff01; > 发布人&#xff1a;日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

共享WiFi贴项目可以带来哪些优势?

当谈到共享WiFi贴的推广时&#xff0c;我们不禁要问&#xff1a;这项新兴的服务项目究竟给我们带来了哪些便利&#xff1f;在这篇文章中&#xff0c;我们将探讨共享WiFi贴推广所带来的益处以及其未来潜力。 共享WiFi贴的推广为人们提供了更加快捷的网络接入方式。无论是商场、餐…

远程运维用什么软件?可以保障更安全?

远程运维顾名思义就是通过远程的方式IT设备等运行、维护。远程运维适用场景包含因疫情居家办公&#xff0c;包含放假期间出现运维故障远程解决&#xff0c;包含项目太远需要远程操作等等。但远程运维过程存在一定风险&#xff0c;安全性无法保障&#xff0c;所以一定要选择靠谱…

项目构建工具maven的基本配置+idea 中配置 maven

&#x1f451; 博主简介&#xff1a;知名开发工程师 &#x1f463; 出没地点&#xff1a;北京 &#x1f48a; 2023年目标&#xff1a;成为一个大佬 ——————————————————————————————————————————— 版权声明&#xff1a;本文为原创文…

hp惠普星15青春版笔记本15s-dr2000/15s-du2000原厂Windows11家庭中文版OEM预装系统

适用型号&#xff1a; 15s-dr2002tx&#xff0c;15s-dr2003tx&#xff0c;15s-dr2004tx&#xff0c;15s-dr2005tx&#xff0c;15s-dr2006tx&#xff0c;15s-dr2016TU&#xff0c;15s-dr2017TU&#xff0c;15s-dr2020TU 15s-du2003tx&#xff0c;15s-du2004tx&#xff0c;15s-…

微信小程序(非个人)备案指南

一、小程序备案法律法规参考 1、《中华人民共和国反电信网络诈骗法》 第二十三条 设立移动互联网应用程序应当按照国家有关规定向电信主管部门办理许可或者备案手续。 2、《互联网信息服务管理办法》 第四条 国家对经营性互联网信息服务实行许可制度&#xff1b;对非经营性互…

多维时序 | MATLAB实现TCN-selfAttention自注意力机制结合时间卷积神经网络多变量时间序列预测

多维时序 | MATLAB实现TCN-selfAttention自注意力机制结合时间卷积神经网络多变量时间序列预测 目录 多维时序 | MATLAB实现TCN-selfAttention自注意力机制结合时间卷积神经网络多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现TCN-s…

python自动化测试(2)-自动化基本技术原理

1 概述 在之前的文章里面提到过&#xff1a;做自动化的首要本领就是要会 透过现象看本质 &#xff0c;落实到实际的IT工作中就是 透过界面看数据。 掌握上面的这样的本领可不是容易的事情&#xff0c;必须要有扎实的计算机理论基础&#xff0c;才能看到深层次的本质东西。 …

零代码编程:用ChatGPT批量删除文件名的字符

文件夹里面的文件标题如下&#xff0c;后面都带有一个网址&#xff0c;怎么批量删除掉呢&#xff1f; 这样让ChatGPT编写一段Python代码&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个处理批量删除文件名中字符的任务&#xff0c;具体步骤如下&#xff1a; 打开…

GO语言数据抓取代码示例

安装Go语言的net/http和io/ioutil包&#xff0c;这两个包是爬虫程序的基础。你可以使用下面的命令来安装&#xff1a; bash go get -u github.com/golang.org/x/net/http2 go get -u golang.org/x/net/html 然后&#xff0c;你可以使用下面的代码来获取爬虫信息&#xff1a; …

第一个ARM程序裸板点灯

硬件知识LED原理图 如何点亮一个LED灯&#xff1f; 看原理图&#xff0c;确定控制LED的引脚。看主芯片的芯片手册&#xff0c;确定如何设置控制这个引脚。写程序。 LED有插脚封装的、贴片封装的。 它们长得完全不一样&#xff0c;因此我们在原理图中把它们抽象出来。 点亮…

ESXi配置两个不同网段虚拟机互通

ESXi配置两个不同网段虚拟机互通 拓扑图&#xff1a; 步骤 在ESXi上新建一个虚拟交换机新建两个端口组&#xff0c;VLAN ID分别为30和31&#xff0c;添加到新建的虚拟交换机上创建两个虚拟机&#xff0c;网络适配器分别使用新建的端口组30和31对新建的虚拟机配置IP在物理交换…

论文阅读:LOGO-Former: Local-Global Spatio-Temporal Transformer for DFER(ICASSP2023)

文章目录 摘要动机与贡献具体方法整体架构输入嵌入生成LOGO-Former多头局部注意力多头全局注意力 紧凑损失正则化 实验思考总结 本篇论文 LOGO-Former: Local-Global Spatio-Temporal Transformer for Dynamic Facial Expression Recognition发表在ICASSP&#xff08;声学顶会…