Mybatis核心

news2025/2/27 22:08:19

文章目录

  • 前言
  • 一、Configuration
  • 二、MappedStatement
  • 三、SqlSession
  • 四、Executor
  • 五、StatementHandler
  • 六、ParameterHandler
  • 七、ResultSetHandler
  • 八、TypeHandler
  • 总结


前言

SqlSession是MyBatis提供的面向用户的操作数据库API。那么MyBatis底层是如何工作的呢?为了解开MyBatis的神秘面纱,我们需要了解一下MyBatis的其他几个比较核心的组件及这些组件的作用。


需要图片

一、Configuration

用于描述MyBatis的主配置信息,其他组件需要获取配置信息时,直接通过Configuration对象获取。除此之外,MyBatis在应用启动时,将Mapper配置信息、类型别名、TypeHandler等注册到Configuration组件中,其他组件需要这些信息时,也可以从Configuration对象中获取。

二、MappedStatement

MappedStatement用于描述Mapper中的SQL配置信息,是对Mapper XML配置文件中<select|update|delete|insert>等标签或者@Select/@Update等注解配置信息的封装。

三、SqlSession

SqlSession是MyBatis提供的面向用户的API,表示和数据库交互时的会话对象,用于完成数据库的增删改查功能。SqlSession是Executor组件的外观,目的是对外提供易于理解和使用的数据库操作接口。

四、Executor

Executor是MyBatis的SQL执行器,MyBatis中对数据库所有的增删改查操作都是由Executor组件完成的。

五、StatementHandler

StatementHandler封装了对JDBC Statement对象的操作,比如为Statement对象设置参数,调用Statement接口提供的方法与数据库交互,等等。

六、ParameterHandler

当MyBatis框架使用的Statement类型为CallableStatement和PreparedStatement时,ParameterHandler用于为Statement对象参数占位符设置值。

七、ResultSetHandler

ResultSetHandler封装了对JDBC中的ResultSet对象操作,当执行SQL类型为SELECT语句时,ResultSetHandler用于将查询结果转换成Java对象。

八、TypeHandler

​ TypeHandler是MyBatis中的类型处理器,用于处理Java类型与JDBC类型之间的映射。它的作用主要体现在能够根据Java类型调用PreparedStatement或CallableStatement对象对应的setXXX()方法为Statement对象设置值,而且能够根据Java类型调用ResultSet对象对应的getXXX()获取SQL执行结果。

总结

实际上SqlSession是Executor组件的外观,目的是为用户提供更友好的数据库操作接口,这是设计模式中外观模式的典型应用。真正执行SQL操作的是Executor组件,Executor可以理解为SQL执行器,它会使用StatementHandler组件对JDBC的Statement对象进行操作。当Statement类型为CallableStatement和PreparedStatement时,会通过ParameterHandler组件为参数占位符赋值。ParameterHandler组件中会根据Java类型找到对应的TypeHandler对象,TypeHandler中会通过Statement对象提供的setXXX()方法(例如setString()方法)为Statement对象中的参数占位符设置值。StatementHandler组件使用JDBC中的Statement对象与数据库完成交互后,当SQL语句类型为SELECT时,MyBatis通过ResultSetHandler组件从Statement对象中获取ResultSet对象,然后将ResultSet对象转换为Java对象。

学习记录,不断沉淀,终究会成为一个优秀的程序员,加油!
您的点赞、关注与收藏是我分享博客的最大赞赏!
博主博客地址: https://blog.csdn.net/qq_45701514

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

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

相关文章

vue.js表情文本输入框组件

文章目录参考链接效果图代码emoji.jsonEmojiText.vue使用参考链接 JS操作文本域获取光标/指定位置插入 vue.js支持表情输入 ttkwsd博客 效果图 代码 不能换行的bug已处理… emoji.json 表情图片放在public的emoji文件夹下面 emoji.json放在src/components/EmojiText文件夹…

Linux 生成pem文件 用于免密登录

1.在远程机器生成.pem文件 生成密钥对&#xff1a; $ ssh-keygen -t rsa -b 2048 -v 直接确认下一步 查看生成的密钥对&#xff1a; $ ls ~/.ssh/ 将私钥重命名至id_rsa.pem&#xff1a; $ mv ~/.ssh/id_rsa ~/.ssh/id_rsa.pem 修改~/.ssh/目录权限&#xff1a; $ chmod …

力扣sql中等篇练习(三)

力扣sql中等篇练习(三) 1 树节点 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # not in匹配上了返回的值是1,casw when里面也是可以使用not in和子查询的 # 注意去重的时候需要筛选掉null值 SELECT id,case when p_id is null then Rootwhen (id …

暄桐好作业之《临王蒙〈具区林屋图〉》

告诉大家一个好消息“暄桐好作业”栏目上新啦~除了与大家分享正在进行的课程好作业&#xff0c;还会向大家展示来自暄桐学长学姐们的优秀国画作品。希望正在上课的暄桐同学们能够从学长学姐的分享以及暄桐教室专业助教的点评中&#xff0c;从中获益并获得力量&#xff0c;继续努…

Java基础(十七):日期时间API

Java基础系列文章 Java基础(一)&#xff1a;语言概述 Java基础(二)&#xff1a;原码、反码、补码及进制之间的运算 Java基础(三)&#xff1a;数据类型与进制 Java基础(四)&#xff1a;逻辑运算符和位运算符 Java基础(五)&#xff1a;流程控制语句 Java基础(六)&#xff1…

chatGPT开发公司

OpenAI是chatGPT的开发公司&#xff0c;成立于2015年&#xff0c;总部位于美国旧金山。OpenAI致力于开发和推广人工智能技术&#xff0c;包括自然语言处理、视觉识别、机器学习等领域&#xff0c;旨在推动人工智能技术对全球社会和经济的影响和发展。 除了chatGPT之外&…

日撸 Java 三百行day31

文章目录day31 整数矩阵及其运算面向对象思想java异常处理java中的getter和setter方法代码day31 整数矩阵及其运算 面向对象思想 结合之前day7和day8面向过程开发&#xff0c;只关注了矩阵加法和矩阵乘法的功能。而day31是面向对象开发&#xff0c;一个矩阵类&#xff0c;在这…

Python实现驾考自动答题,隔壁老王每次都100分....

人生苦短&#xff0c;我用python 不知道大家都考完驾照没&#xff1f; 这个驾照不管大家有没有&#xff0c;我相信大家都是这个&#xff1a; 朋友最近在考驾照&#xff0c;快考科一了… 我微微一笑当场给他整个活~ 用Python整了几十行代码&#xff0c;给朋友实现一下自动答…

前端面试题 - 基础(HTML、HTTP、WEB)

文章目录1、前端 SEO 需要注意哪些2、img 标签上的 title 和 alt 区别3、浏览器输入 url 到显示过程4、浏览器渲染过程5、常见请求方式6、常见的状态码7、网站性能优化8、语义化理解9、浏览器内核理解10、H5的新特性11、离线存储使用&#xff0c;工作原理12、浏览器是如何管理和…

确保实时操作系统(RTOS)设备中的数据安全

导读1月28日大家庆祝了数据保护日&#xff0c;这是一项旨在促进保护数据隐私和安全的国际活动。为了提高人们对数据保护的意识&#xff0c;讨论实时操作系统中数据安全的问题势在必行。目前非常规操作系统已被广泛使用&#xff0c;所以了解这一系统非常重要&#xff0c;尤其是涉…

做完自动化测试,但别让不会汇报毁了你...

pytest 是一个成熟的全功能Python测试工具&#xff0c;可以帮助您编写更好的程序。它与 python 自带的 unittest 测试框架类似&#xff0c;但 pytest 使用起来更简洁和高效&#xff0c;并且兼容 unittest 框架。pytest 能够支持简单的单元测试和复杂的功能测试&#xff0c;pyte…

Javassist动态生成类使用,以及Arthas 查看动态代理生成类内容

java反射 反射的弊端: 性能开销: 因为反射涉及到动态解析的类型&#xff0c;所以某些Java虚拟机的优化不能被执行(因为它不能真正了解你在做什么)。因此&#xff0c;反射操作的性能比非反射操作的性能要慢&#xff0c;应该避免在对性能敏感的应用程序中频繁调用的代码部分。 …

C++记录总结及面试常见问题

C记录总结及面试常见问题指针和函数内存分区模型访问权限struct & class创建类构造函数静态成员this指针const 修饰成员函数友元friend重载运算符和重载函数继承读文件ifstream/fstreamvector中resize和reserve的区别智能指针左值与右值struct、class区别引用指针和函数 函…

Zabbix6.0升级到Zabbix6.4

1&#xff1a;现在的版本是6.0.3 2&#xff1a;停止Zabbix Server进程。 systemctl stop zabbix-server 若升级Zabbix proxy版本&#xff0c;需也停止Zabbix proxy服务 。 systemctl stop zabbix-proxy 3&#xff1a;我用的是MariaDB数据库名称是zabbix。 4&#xff1a; 查看…

windows11安装pytorch2.0

换了新电脑&#xff0c;好久没用windows了&#xff0c;配置一下环境&#xff0c;顺便记录一下方便帮助AI小白不会浪费时间在装环境上&#xff08;一星期不夸张hah&#xff09; 打开命令行&#xff0c;然后输入 nvidia-smi&#xff0c;检查自己的显卡驱动 也可以通过图形界面查…

Python轻量级Web框架Flask(6)——Flask中的单表操作(增删改“查”)

0、前言&#xff1a;Python轻量级Web框架Flask&#xff08;5&#xff09;中生成的新模板就是包含数据库操作的Flask模板。 在pycharm中用flask写表结构时需用用到数据类型的定义如下&#xff1a; 下面总结一些常用到的数据类型&#xff1a; 1、Python轻量级Web框架Flask&…

传智健康项目总结

耗时一个半月终于把传智健康项目跟着做完了&#xff0c;下面是对项目的一点心得体会。 项目知识点总结 Maven中parent父工程聚合 聚合模块(父工程)作用&#xff1a;父工程是一个pom工程&#xff0c;通常只是用来帮助其子模块构建的工具&#xff0c;本身并没有实质的内容。具体…

【Pytorch】搭建网络模型的实战

【Pytorch】搭建网络模型的实战CIFAR10 model structure搭建网络使用Sequential进行搭建网络模型使用tensorboard查看网络结构对CIFAR10数据集进行分类&#xff0c;根据图片内容识别这是哪一类 CIFAR10 model structure 输入input:3通道的32 x 32 图片卷积操作的通道数不变 那…

C#,码海拾贝(16)——求“矩阵秩”的全选主元“高斯消去法(Gauss Elimination)”C#源代码,《C#数值计算算法编程》源代码升级改进版

1 矩阵的秩 Rank of Matrix 矩阵的秩是线性代数中的一个概念。在线性代数中&#xff0c;一个矩阵A的列秩是A的线性独立的纵列的极大数&#xff0c;通常表示为r(A)&#xff0c;rk(A)或rank A。 在线性代数中&#xff0c;一个矩阵A的列秩是A的线性独立的纵列的极大数目。类似地&…

全面解析反欺诈(羊毛盾)API,助你识别各类欺诈风险

前言 反欺诈&#xff08;羊毛盾&#xff09;反机器欺诈 API&#xff0c;是一种基于大数据分析和模型产品的技术&#xff0c;通过输入手机号、手机 IP 地址进行检测&#xff0c;帮助客户识别大量存在恶意的账号。 反欺诈&#xff08;羊毛盾&#xff09;API 的作用 反欺诈&…