mybatis 的mapper接口没有实现类,那么他是如何工作的

news2024/11/19 3:46:54

一、mybatis使用动态代理要实现的功能。

mybatis 的底层实际上运行的还是ibatis,即需要把接口和xml映射翻译成 ibatis 需要的这种格式。

在这里插入图片描述

二、mapper接口的动态代理

  1. 当使用 sqlSession.getMapper 获取一个Mapper 的时候一般是使用 sqlSessionDefaultSqlSession 这个实现类去调用的。
  2. 先去调用 configuration.getMapper。然后会从mapperRegistryknownMappers中拿到接口对应的MapperProxyFactory
  3. MapperProxyFactory会创建出来mapper接口的代理实现类(严格的讲,这生成的只是一个接口的代理,算不上一个真正的实现),并把他交给 MapperProxy 管理。
  4. 然后把代理的实现类返回。

三、mapper接口调用方法

  1. 上文讲到通过sqlsession拿到的是一个经过动态代理的mapper。所以在mapper调用方法的时候,会进入代理对象 MapperProxy的invoke方法。
  2. MapperProxy.invoke,方法中会创建一个MapperMethod对象。这个对象封装了Mapper接口中对应方 法的信息,以及对应的sql语句的信息。
  3. 接下来就会调用MapperMethod 的 execute方法。在这里就会真正执行ibatis的部分。

四、问题:mybatis 的mapper接口没有实现类,那么他是如何工作的

  1. 有些文章中说,mybatis是通过动态代理的方式,生成了mapper接口的实现类,其实这种表达是很不准确的。动态代理并没有替mapper接口生成实现类,而是利用动态代理的方式使接口每次执行方法的时候,都会经过代理类的invoke 方法来做一些操作。
  2. mybatis 的运行,最终都会进入到ibatis 的运行方式来,看ibatis 的运行方式,是并没有mapper接口参与的。所以mybatis 的mapper接口类更像是一个工具人。
  3. mapper接口工具人论述。
    1. 接口被动态的代理了,所以他执行的所有方法都会进入到代理类的invoke方法中。所以使用接口调用方法的目的,只是为了执行代理类的invoke方法而已,工具人mapper 接口只是为代理类跑腿而已
    2. mapper接口的每个方法会定义 入参类型、出参类型,在调用接口方法时候还会往里面传入具体参数。所以mapper接口只是为了让ibatis调用selectOne、selectList等方法时运送 这些关键信息的而已。

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

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

相关文章

K_A11_006 基于STM32等单片机采集雨水模块 串口与OLED0.96双显示

K_A11_006 基于STM32等单片机采集雨水模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线说明1.1、STC89C52RC雨水模块1.2、STM32F103C8T6雨水模块五、基础知识学习与相关资料下载六、视频…

电脑开机找不到启动设备怎么办?

如果你的电脑弹出错误消息并提示“找不到启动的设备”,不用担心,本文将告诉你5种不同的方法,可以轻松修复无可引导的设备的问题!“找不到启动设备”是什么意思?可引导设备(又称启动设备)是一种存…

Vue.js学习笔记

vue.js学习笔记 Vue.js 是一款流行的 JavaScript 前端框架,Vue 所关注的核心是 MVC 模式中的视图层,它也方便地获取数据更新,实现视图与模型的交互。 1.创建代码片段 声明式渲染:Vue.js 的核心是一个允许采用简洁的模板语法来声…

kafka开kerberos认证报错the client is being asked for a password

Kafka kerberos认证错误记录TOC kafka开发调试 kerberos认证错误记录 背景 kafka 开发调试,开 kerberos情况下遇到的错误。 错误日志 Could not login: the client is being asked for a password, but the Kafka client code does not currently support obta…

隐私计算主流技术

隐私计算目前主流的技术路线有三种:多方安全计算、联邦学习和TEE。 1. MPC多方安全计算 百万富翁问题: 两个富翁,分别为张三和李四,他们自己都清楚自己有几千万财产即他们心里清楚 1~10中的一个数(代表自己千万级的财富)。他们想知道到底谁的数更大一些。 1.1 MPC定义 …

【博学谷学习记录】大数据课程-学习第三周总结

1. 大数据课程导论 数据分析的前提是有数据,数据存储的目的是支撑数据分析。究竟怎么去存储庞大的数据量,是开展数据分析的企业在当下面临的一个问题。传统的数据存储模式存储容量是有大小限制或者空间局限限制的,怎么去设计出一个可以支撑大…

【UE4 第一人称射击游戏】49-僵尸攻击动画

上一篇:【UE4 第一人称射击游戏】48-僵尸死亡设置本篇效果:可以看到僵尸在移动到玩家面前会从移动状态转为攻击状态,播放相应的攻击动画。步骤:打开“SimpleAI”,删除所有和“Character看见pawn时”、“AI随机移动”的…

动态规划算法刷题笔记【背包问题】

01背包问题 dp[i-1][j]指没纳入当前物品,dp[i-1][j-ci]wi指纳入当前物品,并且是和j-ci体积下的价值作和 滚动数组优化空间复杂度 [NOIP2005 普及组] 采药 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜…

基于jsp+mysql+Spring的Springboot旅游网站管理系统设计和实现

基于jspmysqlSpring的Springboot旅游网站管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末…

数据库操作——redis

数据库操作——redisredis介绍Redis、Mamcache/MongoDB对比分布式数据库的CAP原理redis的下载和安装安装之后的操作key操作数据类型字符串命令 string列表 list集合set哈希hashZset 有序集合持久化RDB相关的配置AOF相关的配置开启AOF共存AOF 相关的配置总结事务定义和执行事务的…

【Linux杂篇】Cron是什么?利用Cron Job自动执行定时任务

Cron Cron是一个实用程序,用于在特定的时间自动执行重复任务。在Linux中,常用 cron 服务器来完成这项工作,以下是Cron的工作原理: 如果想稍后执行特定任务一次,可以使用其他命令。但是,对于重复性任务&am…

模电视频笔记:详解直接耦合放大电路p146,3.1.1

一个图一个图的分析下来: 初始的电路原型 ,这是把两个基本的共射放大电路组合了起来。 补充几个很重要的知识点,否则字都认识,但是完全看不懂在说什么: a、图中的晶体管是npn型晶体管。 b、这个电路是共射放大电路 c、…

产品经理如何更好的适应工作呢?

先来了解一下和产品经理相关的数据 大厂职能需求占比变化 岗位薪酬水平&岗位要求 产品经理市场需求现状 大厂喜欢招聘什么样的人? 无论是通过什么途径成为了一名产品经理,对于该岗位所需要的技能其实都是类似的,把产品经理需要具备的能力…

236. 二叉树的最近公共祖先

236. 二叉树的最近公共祖先 难度中等 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大…

【算法数据结构初阶篇】:随机函数

随即函数的用处非常大,比如可能用来用做对数器,生成大量随机的测试数据,用来验证我们写的程序是否有误,可以帮助我们快速定位存在错误的测试用例,进行debug。这里注意Java中的随机函数Math.random()是等概率的返回[0,1…

TCP/IP网络编程(4)——基于 TCP 的服务端/客户端(1)

文章目录第 4 章 基于 TCP 的服务端/客户端(1)4.1 理解 TCP 和 UDP4.1.1 TCP/IP 协议栈4.1.2 链路层4.1.3 IP 层4.1.4 TCP/UDP 层4.1.5 应用层4.1.6 生活小例子4.2 实现基于 TCP 的服务器/客户端4.2.1 TCP 服务端的默认函数的调用程序4.2.2 进入等待连接…

微信小程序原生开发功能合集一:微信小程序开发介绍

一、专栏介绍 本专栏主要内容为微信小程序常用功能开发过程的介绍说明,包括开发微信小程序常用组件的封装、常用功能的开发等,提供源代码、开发过程讲解视频、完整的课程等。 组件封装: 下拉选择组件、图片上传组件、视频上传组件、富文本组件…

C# Dictionary(字典)各种属性的用法

C# Dictionary(字典)各种属性的用法 要使用Dictionary集合,需要导入C#泛型命名空间! ​System.Collections.Generic​(程序集:mscorlib) Dictionary的描述 1、从一组键(Key)到一组值…

seo关键词排名下降怎么办(SEO网站关键词排名不稳定)

关键词优化网站排名突然下降是什么原因 一般来讲,网站的排名不会大幅度的下降,除非搜索引擎的流量特别小,而这也不是偶然发生的。网站一旦获得对应的权重或者排名,就不要轻易的更改板块和文章,甚至是文章标题之类的&a…

Allegro如何导出和导入层叠操作指导

Allegro如何导出和导入层叠操作指导 在做PCB设计的时候,需要导出或者导入层叠,Allegro升级到了172以后,支持单独导出和导入层叠,如下图 具体操作如下 导出层叠,选择setup选择Cross-section