66.Spring是如何整合MyBatis将Mapper接口注册为Bean的原理?

原理

    1. 首先MyBatis的Mapper接口核心是JDK动态代理
    1. Spring会排除接口,无法注册到IOC容器中
    1. MyBatis 实现了BeanDefinitionRegistryPostProcessor 可以动态注册BeanDefinition
    1. 需要自定义扫描器(继承Spring内部扫描器ClassPathBeanDefinitionScanner ) 重写排除接口的方(isCandidateComponent)
    1. 但是接口虽然注册成了BeanDefinition但是无法实例化Bean 因为接口无法实例化
    1. 需要将BeanDefinition的BeanClass 替换成JDK动态代理的实例(偷天换日)
    1. Mybatis 通过FactoryBean的工厂方法设计模式可以自由控制Bean的实例化过程,可以在getObject方法中创建JDK动态代理

额外扩展

MyBatis 本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

总之,Mybatis对JDBC访问数据库的过程进行了封装,简化了JDBC代码,解决JDBC将结果集封装为Java对象的麻烦。

下图是MyBatis架构图:
在这里插入图片描述
(1)mybatis-config.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂

(2)基于SqlSessionFactory可以生成SqlSession对象

(3)SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。

(4)Executor是SqlSession底层的对象,用于执行SQL语句

(5)MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)

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

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

相关文章

物业app开发实战:10大功能必备,打造智能社区生活

随着智能科技的快速发展,物业管理也逐渐迈入数字化时代。物业app开发成为了提升社区管理效率、改善居民生活质量的重要途径。在本文中,我将分享10大必备功能,帮助开发者打造智能社区生活的物业app。 1. 便捷的社区公告发布功能 通过物业app…

R语言VRPM包绘制多种模型的彩色列线图

列线图,又称诺莫图(Nomogram),它是建立在回归分析的基础上,使用多个临床指标或者生物属性,然后采用带有分数高低的线段,从而达到设置的目的:基于多个变量的值预测一定的临床结局或者…

免费畅享,打破写作瓶颈:星火写作助手覆盖全面,助你轻松创作

啰嗦几句 最近年终岁末,公司的各种文案各种总结,写得人是头晕脑胀,所以好多小伙伴最近在求智能写作的软件,最好是ChatGPT。 ChatGPT是国外产品,在国内并不能访问。而就智能写作来说,我们何必舍近求远呢&am…

1.新建项目

愿你出走半生,归来仍是少年! 环境:.NET 7、MAUI 1.新建项目 打开VS2022,点击“创建新项目”。 新建项目 2.选择项目类型 在搜索框输入“Maui”,选择“NET MAUI应用”,配置项目名称、保存地址等,并选择框架版本。 项目…

精准监测,守护城市脉搏:管网压力、流量监测设备

在繁忙的城市中,每一个管道都如同城市的血脉,承载着重要的使命。为了确保城市的正常运行,我们提供精准的管网压力、流量监测设备,用科技守护城市的脉搏。 我们的设备采用最新的技术,可以实时监测管网的压力和流量&…

【11.PWM捕获】蓝桥杯嵌入式一周拿奖速成系列

系列文章目录 蓝桥杯嵌入式系列文章目录(更多此系列文章可见) PWM捕获 系列文章目录一、STM32CUBEMX配置二、项目代码1.mian.c --> HAL_TIM_IC_CatureCallback 总结 一、STM32CUBEMX配置 STM32CUBEMX PA15 ->TIM2_CH1; PB4-> TIM3_CH1 预分频设置为79,自动重装载设置…

HTML实战

HTML实战 标题 标题排版 img标签路径书写的两种方式: 绝对路径 绝对磁盘路径:C:\User…绝对网络路径:https://i2.sinaimg.cn/dy/deco/2012/0613/yocc20120613img01/news_logo.png 相对路径 ./ : 当前目录 ../ : 上一级目录宽…

Spring基于dynamic-datasource实现MySQL多数据源

目录 多数据源实现 引入依赖 yml配置文件 业务代码 案例演示 多数据源实现 引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>dynamicdatasourcespringbootstarter</artifactId><version>3.5.0</version> &…

Programming Abstractions in C阅读笔记:p248-p253

《Programming Abstractions in C》学习第69天&#xff0c;p248-p253总结&#xff0c;总计6页。 一、技术总结 “A generalized program for two-player games”如标题所示&#xff0c;该小节强调要学会从一个复杂的程序中抽象出通用的内容——这也是本书的主旨——“Program…

Linux快速入门

目录 一. Linux的结构目录 1.1 Linux的目录结构 1.2 常用的目录介绍 二. 常用命令 # 与 $ 提示的区别 查看ip地址&#xff1a;ifconfig su&#xff1a;切换用户 cd 目录查看 查看文件内容 创建目录及文件 复制和移动 其他 tar which whereis find chmod 三. vim一般使用 四…

C4.5决策树的基本建模流程

C4.5决策树的基本建模流程 作为ID3算法的升级版&#xff0c;C4.5在三个方面对ID3进行了优化&#xff1a; &#xff08;1&#xff09;它引入了信息值&#xff08;information value&#xff09;的概念来修正信息熵的计算结果&#xff0c;以抑制ID3更偏向于选择具有更多分类水平…

<C++>STL->vector

vector的介绍 vector的使用文档 vector是一个可改变数组大小的序列容器vector和数组一样采取连续的空间存放数据&#xff0c;可以使用方括号访问vector的元素&#xff0c;和数组一样高效。但是vector的大小可以动态增长&#xff0c;而数组不行实际上vector内部使用一个动态分…

redis—Set集合

目录 前言 1.常见命令 2.使用场景 前言 集合类型也是保存多个字符串类型的元素的&#xff0c;但和列表类型不同的是&#xff0c;集合中1)元素之间是无序的2)元素不允许重复&#xff0c;如图2-24所示。一个集合中最多可以存储22 - 1个元素。Redis 除了支持集合内的增删查改操…

前端 .then 返回有数据但是return 不出来 ,并 解决处理后的 Promise下的Object

解决方法就是&#xff1a;async await async声明方法为异步方法&#xff0c;await等待异步操作执行完。 &#xff08;async函数return的是Promise&#xff0c;await Promise后得到Object&#xff09; 注意的是&#xff0c;异步方法返回值为peomise<>&#xff0c;接收时需…

【计算机网络】【练习题】【新加坡南洋理工大学】【Computer Control Network】

说明&#xff1a; 仅供学习使用。 一、题目描述 该题目描述一个网络中传播时延&#xff08;Transmission Delay&#xff09;的例子。题目如下&#xff1a; 二、问题解答&#xff08;个人&#xff09; 笔者第3问采用均值不等式求解。标答中采用求导数的方法求极值。似乎均值…

学术精选,EI检索2024年计算机应用系统与微芯片技术国际会议

2024年计算机应用系统与微芯片技术国际会议(ICCASMT 2024) 2024 International Conference on Computer Application Systems and Microchip Technology(ICCASMT 2024) 数据库&#xff1a;EI,CPCI,CNKI,Google Scholar等检索 一、【会议简介】 &#x1f514; ​2024年计算机应用…

JS之打地鼠案例

需要素材的同学可以私信我 效果图&#xff1a; 上代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title><style>* {margin: 0;padding: 0;}.box {position: relative;width: 320px;heigh…

数据结构之树

树 前面文章讲的线性表&#xff0c;不论数组还是链&#xff0c;都是“一对一”的关系&#xff0c;本文章节让我们来认识一下“一对多”关系的数据结构——树&#xff08;Tree&#xff09;。 树结构分为二叉树和三叉树等&#xff0c;如下图所示。常用的就是二叉树&#xff0c;因…

深度学习(5)--Keras实战

目录 一.Keras基础概念 二.如何跑通Keras项目 2.1.在cmd上跑通 2.2.在PyCharm上跑通 一.Keras基础概念 Keras是深度学习中的一个神经网络框架&#xff0c;是一个高级神经网络API&#xff0c;用Python编写&#xff0c;可以在TensorFlow&#xff0c;CNTK或Theano之上运行。 …

如何保护电脑数据?电脑数据怎么保护?

电脑会储存大量的重要数据&#xff0c;而为了避免数据泄露&#xff0c;必须要使用专业的方式进行保护。那么&#xff0c;要如何保护电脑数据呢&#xff1f;下面我们就来了解一下。 文件夹加密超级大师 文件夹加密超级大师是一款专业的电脑数据加密软件&#xff0c;拥有强大的文…