为啥mybatis的mapper只有接口没有实现类,但它却能工作?(全网独一份

项目中常见的Mapper文件和接口 Mapper和接口,mybatis 阅读详情

嗯,好像有点道理,我果然是个天才!

知识点:动态代理

动态代理有几种实现方式,这里我们就先讲JDK动态代理,使用步骤如下:

  • 新建一个接口

  • 创建代理类,实现java.lang.reflect.InvocationHandler接口

  • 接口测试

接口我们就用UserMapper,我们来写个代理对象。

ok,一个简单的动态代理例子送给你们,上面代码中关键生成动态代理对象的关键代码是:

  • loader: 用哪个类加载器去加载代理对象

  • interfaces:动态代理类需要实现的接口

  • h:动态代理方法在执行时,会调用h里面的invoke方法去执行

源码分析

好啦,上面该做的准备已经都准备好了,我们对mybatis的这个mapper接口大概都有些思路了,下面我们去正式验证一下,那么肯定就要去看源码了。我们只是去验证上面的mapper接口问题,所以不需要去看全部的代码,当然如果你看整个流程下来的话,会更加清晰。

论证猜想,我们可以采用结果导向的方式去看源码,从获取mapper那里开始看,也就是

主要从sqlSession.getMapper(UserMapper.class);这里开始,先看整个UserMapper是不是被动态代理的。ok,我们进入代码中:

  • org.apache.ibatis.session.SqlSessionManager#getMapper

继续走到Configuration方法里,Configuration是mybatis所有配置相关的地方,mybatis-cfg.xml、UserMapper.xml等文件都会被预先加载到Configuration里。

  • org.apache.ibatis.session.Configuration#getMapper

这时候,我们发现Configuration里面出现了一个mapperRegistry,翻译过来可以理解为mapper的注册器,其实在加载UserMapper.xml的时候,我们就需要在mapperRegistry里面进行注册,所有,我们可以从这里面进行获取。继续走~

  • org.apache.ibatis.binding.MapperRegistry#getMapper

ok,这里分为了两步:

  • knownMappers.get(type);

  • 获取已知的加载过的mapper中获取出mapper代理工厂

  • mapperProxyFactory.newInstance(sqlSession);

  • 代理工厂生成动态代理返回

我们一步步分析,别急,knownMappers其实是个map,根据userMapper.class获取MapperProxyFactory:

所以knownMappers必然是源码前面的步骤中set进去的。我们先找找,到底是哪里set进去的。找呀找,找到这里:

  • org.apache.ibatis.builder.xml.XMLMapperBuilder#bindMapperForNamespace

我们看这个boundType,是通过Resources.classForName(namespace);生成的class,Resources.classForName底层其实就是调用Class.forName生成的反射对象,而参数是namespace,namespacne不正是com.lfq.UserMapper嘛:

完美!!Class.forName(com.lfq.UserMapper)生成反射对象。论证了我们第一点猜想。生成的boundType在被configuration.addMapper(boundType);所以就有了:

  • org.apache.ibatis.session.Configuration#addMapper

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后,如果大伙有什么好的学习方法或建议欢迎大家在评论中积极留言哈,希望大家能够共同学习、共同努力、共同进步。

小编在这里祝小伙伴们在未来的日子里都可以 升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰!!

不论遇到什么困难,都不应该成为我们放弃的理由!

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,需要一份小编整理出来的学习资料的关注我主页或者点击我的GitHub免费领取~

这里是关于我自己的Android 学习,面试文档,视频收集大整理,有兴趣的伙伴们可以看看~

资料的关注我主页或者点击我的GitHub免费领取~

这里是关于我自己的Android 学习,面试文档,视频收集大整理,有兴趣的伙伴们可以看看~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

Mybatis(全网最详细)值得收藏 文章摘要: MyBatis框架是一个半自动ORM持久层框架,本质是对JDBC的封装,需手动编写SQL语句但免除了JDBC代码。其核心优势包括简化开发、提高效率、增强规范性,适用于高性能互联网项目。文章详细讲解了MyBatis的环境搭建、核心对象(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession)、映射文件配置、增删改查操作及动态SQL实现。特别介绍了关联查询(一对一、一对多、多对多)、缓存机制(一级/二级缓存)、注解开发与映射文件对比,以及PageH 阅读详情

相关推荐

(全网最全) 企业级Mapper 层测试教程

本文介绍了基于@Sql和H2数据库的Mapper层测试方法。主要内容包括:1) Mapper层测试的目标是验证数据库访问层正确性,而非业务逻辑;2) 推荐使用JUnit5、H2内存数据库和@Sql注解等技术栈;3) 详细解析了@MybatisPlusTest、@AutoConfigureTestDatabase等核心测试注解的使用方法;4) 说明了测试配置文件的加载规则和优先级。文章提供了完整的Maven依赖示例和代码片段,帮助开发者快速掌握Mapper层测试的最佳实践。

qq_49474843的博客 1099

Mybatis(五)------Mybatis执行Mapper接口的方法流程

在java中常用的动态代理一般有两种方式,jdk动态代理和cglib动态代理。上面我讲了先通过动态代理获取Mappper的代理对象,而代理方法invoke方法(代理方法调用时会调用,代理方法逻辑是通过Mapperproxy类,而代理对象的创建时通过MapperProxyFactory工厂实例化MapperProxy对象返回)中创建一个MapperMethod对象(用来描述Mappe接口中方法信息的对象),然后通过调用该对象的execute方法去执行sql语句。

qq_35599414的博客 4133

Ai数字人直播系统源码部署

虚拟形象定制,直播内容智能生成,多语言支持,智能互动,声音克隆,24 小时不间断直播,多平台直播,智能数据分析,实时情感识别,视频合成,Ai数字人直播系统源码出售,Ai数字人直播系统源码部署实现 AI 数字人 24 小时不间断直播功能是一个较为复杂的任务,涉及到多个方面,如直播流的推送、内容的持续生成、系统的稳定性保障等。以下为你提供一个简化的实现思路和示例代码,借助 Python 结合 FFmpeg 工具来模拟 24 小时不间断直播。

weixin_ggwwsscc的博客 1256

Mapper接口

Mapper接口中的方法可以通过MyBatis的映射配置文件(通常是XML文件)来与实际的SQL语句进行关联。当安装MyBatisX插件并生成Mapper接口的xml文件时,通常是为了将Mapper接口中的方法与对应的SQL语句进行关联,生成对应的映射配置文件。Mapper接口的作用是将数据库操作的逻辑与实际的SQL语句解耦,使得数据访问层的代码更加清晰和可维护。通过定义Mapper接口,可以在Java代码中直接调用这些方法来执行数据库操作,而不需要直接编写SQL语句。

qq_61818443的博客 1356

Vanna 2.0:基于LLM的智能文本到SQL框架,实现企业级数据查询与权限控制

文本到SQL技术是自然语言处理与数据库交互的重要桥梁,它允许用户使用日常语言直接查询数据库,无需编写复杂的SQL语句。其核心原理是利用大语言模型理解用户意图,并结合检索增强生成技术,将自然语言问题转换为准确的结构化查询语言。这项技术的价值在于大幅降低了数据访问门槛,提升了业务人员的数据自助分析能力,并能在金融分析、销售报表、运营监控等场景中实现实时数据洞察。Vanna 2.0作为一个开源框架,通过引入用户感知的智能体架构和行级安全策略,解决了企业级应用中的多租户数据隔离与权限控制等关键问题,使得自然语言数据

weixin_42629522的博客 544

【华为OD机试真题】282、求满足条件的最长子串的长度 | 机试真题+思路参考+代码分析 (C++、Java、Py、C语言、JS)

题目描述 >给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度,字符串本身是其最长的子串,子串要求: >  1、只包含1个字母(a~ z,A~Z), 其余必须是数字; 2、字母可以在子 串中的任意位置; >  如果找不到满足要求的子串,如全是字母或全是数字,则返回-1

KJ.JK 1万+

Mybatis中mapper接口实现和方法的执行

1.mapper接口会保存在configuration中的mapperRegistry对象中,MapperRegistry有一个MapperProxyFactory的缓存表,mapper接口以MapperProxyFactory代理类的形势进行存储。

qq_40858363的博客 1763

【C语言趣味教程】(0) 专栏介绍

这是一套C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅!本专栏保证篇篇精品,继续保持本人一贯的幽默式写作风格,当然,在有趣的同时也同样会保证文章的质量,旨在能够产出"有趣的干货" !本系列教程不管是零基础还是有基础的读者都可以阅读,可以先看看目录!标题前带星号 (*) 的部分不建议初学者阅读,因为内容难免会超出当前章节的知识点,面向的是对 C 语言有一定基础或已经学过

有道无术, 术尚可求。有术无道, 止于术。 2万+

MyBatis 之三:配置文件详解和 Mapper 接口方式

在多层架构开发中,我们常常按功能划分为控制层、业务层、DAO层 在 DAO 层设计中,一般都会设计接口来访问数据库 在MyBatis框架中,Mapper接口方式是一种基于接口编程的映射方式,它允许开发者通过定义一个Java接口来声明SQL操作,而无需编写XML配置文件。MyBatis会自动为这些接口生成代理对象,并处理方法调用到SQL执行的映射关系。

zp8126的专栏 2652

vs2017配置liblas库+测试代码

之前已经配置好pcl(vs2017配置pcl),可以单独配置liblas,也可以在原有pcl属性表的基础上继续配置

孙悟空 4023

图神经网络实战(21)——图神经网络的可解释性

在本节中,我们探讨了应用于图神经网络 (Graph Neural Networks, GNN) 的可解释性人工智能 (Explainable Artificial Intelligence, XAI) 技术。可解释性是许多领域的关键要素,可以帮助我们建立更好的模型。我们介绍了不同的局部解释技术,并重点讨论了 GNNExplainer (基于扰动的方法),在图分类任务中应用 GNNExplainer。

盼小辉丶的博客 9536

为啥mybatis的mapper只有接口没有实现类,但它却能工作?(全网独一份!!)

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)Java面试精选题、架构实战文档你的支持,我的动力;祝各位前程似锦,offer不断!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!编~**你的支持,我的动力;

disrm84160的博客 748

【四足机器人项目实战】MIT四足机器人力控电机优劣分析及解决办法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、mit力控电机方案二、弊端三、优点四、解决办法设计相关看专栏其他博客 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对XXX做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、mit力控电机方案 MITCheetahMini驱动器采用的电机是类似于公版电机T-MotorU8的型号

qq_35635374的博客 6090

mapper命名规范_Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华。前言上节我们介绍了 《 Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 》,内容很详细( 也很枯燥),由于篇幅实在过于冗长,我预计大家想看完得花上两段上班地铁公交车的时间 。。。不过应该有让大家了解到 Mybatis 的核心配置文件 config.xml 全貌,其中的 元素即是我们本节准备登场介绍的 ...

weixin_39650745的博客 1660

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

全网最强JavaWeb笔记 | 万字长文爆肝JavaWeb开发——day08数据库Mybatis入门

万字长文爆肝黑马程序员2023最新版JavaWeb教程。这套教程打破常规,不再局限于过时的老套JavaWeb技术,而是与时俱进,运用的都是企业中流行的前沿技术。笔者认真跟着这个教程,再一次认真学习一遍JavaWeb教程,温故而知新,对JavaWeb开发也有了更加深入细致的了解。因此笔者做了全网最全面详细的学习笔记,通篇图文并茂,

qq_45832461的博客 1645

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

mybatis通用mapper_全网最全Mapper解析,附实操代码帮你更好理解

今天给大家介绍一位老朋友当你第一次接触Java开发的时候,这个老朋友就和你形影不离,当你要进行ORM的时候,单表的增删改查,这位老朋友给了你极大的帮助,不知道你想到他了吗?对,这就是通用mapper,这也是对于这位老朋友最简单的介绍如果你是新来做客的程序猿,我给你详细的介绍一下它;你要是老牌程序员,我们来重新认识一下代码结构库表配置文件在applicationContext会话工厂里配置通用map...

weixin_39864738的博客 453

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华。 前言 上节我们介绍了 《 Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 》,内容很详细( 也很枯燥),由于篇幅实在过于冗长,我预计大家想看完得花上两段上班地铁公交车的时间 。。。 不过应该有让大家了解到 Mybatis 的核心配置文件 config.xml 全貌,其中的 元素即是我们本节准备登场介绍的 SQL 映射器,上节有介绍了三种引入 SQL 映射器的方式,本节我们就主要聊聊它的几个顶级元素.

潘潘和他的朋友们 1411

mapper命名规范_这下够清楚了吧!详解Mybatis的Mapper映射文件

前言上节我们介绍了 《 Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 》,内容很详细( 也很枯燥),由于篇幅实在过于冗长,我预计大家想看完得花上两段上班地铁公交车的时间 。。。不过应该有让大家了解到 Mybatis 的核心配置文件 config.xml 全貌,其中的 元素即是我们本节准备登场介绍的 SQL 映射器,上节有介绍了三种引入 SQL 映射器的方式,本节...

weixin_39593354的博客 2925

springboot+mybatis-generator逆向工程自动生成的代码文件内容详细解析+使用(Mapper.xml+实体类+增删查改条件模板类+Mapper接口类)

数据库设计 实体类.java 实体类Example.java ~Mapper.xml 大致情况: 名称空间,定义到Mapper接口类上 <mapper namespace="com.superkarx.dao.TestMapper"> 结果集 <!--结果集,指定这个结果集的 id 叫什么,返回的类型是对应哪个 bean--> <resultMap id="BaseResultMap" type="com.superkarx.pojo.Test">

GDUT_xin的博客 650

mybatis delete 存在id单删除不掉_Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件...

封面:洛小汐作者:潘潘若不是生活所迫,谁愿意背负一身才华。前言上节我们介绍了 《Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解》,内容很详细( 也很枯燥),由于篇幅实在过于冗长,我预计大家想看完得花上两段上班地铁公交车的时间 。。。不过应该有让大家了解到 Mybatis 的核心配置文件config.xml全貌,其中的 元素即是我们本节准备登场...

weixin_39921023的博客 454

. mybatis指定配置文件的根元素_这下够清楚了吧!详解Mybatis的Mapper映射文件

前言上节我们介绍了 《 Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 》,内容很详细( 也很枯燥),由于篇幅实在过于冗长,我预计大家想看完得花上两段上班地铁公交车的时间 。。。不过应该有让大家了解到 Mybatis 的核心配置文件 config.xml 全貌,其中的 元素即是我们本节准备登场介绍的 SQL 映射器,上节有介绍了三种引入 SQL 映射器的方式,本节...

weixin_42462474的博客 1246

全网最详细的Mybatis介绍和基本使用

org.mybatismybatis3.5.4mysqlmysql-connector-java5.1.47public class Emp {private Integer id;private String username;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void set

2401_83703893的博客 608
上一篇: Js-w3school(2024,学习前端开发只要这些东西
下一篇: SpringBoot mybatis多数据源配置,彻底帮你搞懂
普通网友
博客等级 码龄5年 4697粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值