Mapper代理开发

引入

Mybatis入门方式中,以下代码仍存在硬编码问题

Mapper 代理开发:

目的:

  • 解决原生方式中的硬编码

  • 简化后期执行sql

------下图中,第一段代码是原生硬编码代码块,第二个是引入了Mapper代理开发的代码块。

Mapper代理开发步骤

1、 定义与SQL映射文件同名的Mapper接口,并将Mapper接口和SQL映射文件放置在同一目录下

1、在原项目结构中的建立一个与pojo文件夹同级的mapper文件夹,在里面存放相关与映射文件同名的接口(以UserMapper为例)

2、然后将UserMapper接口和UserMapper.xml放在同一目录下。

!!!方法一:这里放在同一文件夹下,不能直接将UserMapper.xml文件拖放到mapper文件夹下(规定配置文件统一放在resources文件夹下)

方法二:利用resources中的配置文件,在maven项目编译后会和java代码出现在同一块,例如:

观察左图,可以看到经过编译后的maven项目会多出一个target包

里面的classes文件夹下不仅有java文件夹里编译产生的class文件,还有resources文件夹下的所有配置文件。

!!!所以可以通过在resources文件夹里建立与UserMapper接口对应的包路径就可以将UserMapper.xml和UserMapper接口放在同一个包下, 如图:

  • 在resources建包注意事项:

    • 不能像在java中建包一样,通过‘ . ’来递归建包,在resources中只有Directory选项,对于com.xyy.mapper会将整个字段当做是文件夹名

    • 点击Directory选项,如果想要递归进行建包,可以通过' / '来进行递归建包,这样子com/xyy/mapper建的就是在com文件夹下的xyy文件夹下的mapper文件夹!

    修改了UserMapper.xml配置文件后,需要将mybatis核心配置文件mybatis-config文件中的相对路径进行修改,可以选中UserMapper.xml - 鼠标右键 - copy Path - Path From Source Root 即可将此时修改后的UserMapper.xml这个sql映射文件的相对路径给赋值出来,在mybatis-config进行修改

last but not least!!!

因为将sql映射文件移动了位置,在mybatis中的核心配置文件中的相对路径改掉

如下:

2、 设置SQL映射文件的namespace属性为Mapper接口全限定名

以UserMapper为例子

3、 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

以UserMapper为例,在UserMapper接口中一定是会有方法的,方法名就是sql映射文件中的id,参数类型和返回值类型保持一致,如图所示:

4、 编码

4、1 通过SqlSession的getMapper方法获取Mapper接口的代理对象
4、2 调用对应方法完成sql的执行

Tips

1、如何通过方法名来执行sql映射文件中的sql语句的?

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

List<User> users = userMapper.selectAll();

利用Mapper代理开发时,是如何通过方法名来执行sql映射文件中的sql语句的?

在利用Mapper代理进行MyBatis开发时,通过接口方法名来执行SQL映射文件中的SQL语句的过程涉及几个关键步骤。这个过程依赖于MyBatis的框架机制和配置。以下是详细的解释:

  1. Mapper接口定义:

    • 首先,你需要定义一个Mapper接口,该接口包含与SQL映射文件中定义的SQL语句相对应的方法。例如,UserMapper接口可能包含一个名为selectAll的方法,用于检索所有用户。

  2. SQL映射文件配置:

    • 在MyBatis的SQL映射文件中(通常是XML文件),你需要为Mapper接口中的每个方法定义对应的SQL语句。这些SQL语句通过<select><insert><update><delete>等标签进行配置,并且每个SQL语句都有一个唯一的id,这个id需要与Mapper接口中方法的名称相匹配。

  3. Mapper代理机制:

    • 当你调用sqlSession.getMapper(UserMapper.class)时,MyBatis会创建一个Mapper接口的代理对象。这个代理对象会在运行时动态地处理对接口方法的调用。

    • 当你调用代理对象的某个方法时(例如userMapper.selectAll()),MyBatis会查找与该方法名称相匹配的SQL映射文件中的SQL语句。

    • MyBatis使用Java反射机制来识别调用的方法名称,并将其与SQL映射文件中的id进行匹配。

  4. SQL执行:

    • 一旦找到了与接口方法相匹配的SQL语句,MyBatis会解析该SQL语句,并根据需要准备参数、执行SQL查询,并将结果映射回Java对象。

    • 如果SQL语句是查询操作,MyBatis会将查询结果映射为Java对象列表(例如List<User>),并返回给调用者。

  5. 配置和缓存:

    • MyBatis通常会在启动时加载SQL映射文件,并将它们缓存起来,以便在运行时快速查找和解析SQL语句。

    • 代理对象的创建和SQL语句的解析都是相对开销较大的操作,但MyBatis通过缓存和优化的方式使得这些操作在运行时变得高效。

  6. 事务管理:

    • MyBatis还支持事务管理,这意味着你可以在事务的上下文中执行SQL语句,并在需要时提交或回滚事务。

总之,Mapper代理机制允许你通过简单地调用接口方法来执行复杂的SQL查询和更新操作,而无需编写大量的样板代码。MyBatis负责处理SQL语句的解析、执行和结果映射等底层细节,从而让你能够专注于业务逻辑的实现。

2、在mybatis-config中加载sql映射文件时,如果映射文件很多怎么办?(利用Mapper代理开发)

如果有很多映射文件,岂不是要像如下这样,在mybaits-config.xml中的< mappers > ... < /mappers/>中写入大量的< mapper.../ >

组件,将相对路径写下来。这样对于大量映射文件时是件非常麻烦的事。

but,在通过Mapper代理开发后,可以通过包扫描方式来进行简化加载映射文件

如下:

可以看到也是可以运行成功的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

abc 384 D(子数组->前缀和) +E(bfs 扩展的时候 按照数值去扩展)

D 做出来的很开心&#xff0c;好像本来就应该做出来>< 思路&#xff1a; 对于连续的子序列&#xff08;也就是 子数组&#xff09; 一般都和 前缀和 后缀和 有关系 区间[l r] 可以用 前缀 S_r -S{l-1} tar来表示。(对于两个元素等于一个数字&#xff0c;就可以枚举一个&…

【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具

工具介绍 toxssin 是一种开源渗透测试工具&#xff0c;可自动执行跨站脚本 (XSS) 漏洞利用过程。它由一个 https 服务器组成&#xff0c;它充当为该工具 (toxin.js) 提供动力的恶意 JavaScript 有效负载生成的流量的解释器。 安装与使用 1、安装需要的依赖库 git clone http…

web网页前后端交互方式

参考该文&#xff0c; 一、前端通过表单<form>向后端发送数据 前端是通过html中的<form>表单&#xff0c;设置method属性定义发送表单数据的方式是get还是post。 如使用get方式&#xff0c;则提交的数据会在url中显示&#xff1b;如使用post方式&#xff0c;提交…

Visual studio的AI插件-通义灵码

通义灵码 TONGYI Lingma 兼容 Visual Studio、Visual Studio Code、JetBrains IDEs 等主流 IDE&#xff1b;支持 Java、Python、Go、C/C、C#、JavaScript、TypeScript、PHP、Ruby、Rust、Scala 等主流编程语言。 安装 打开扩展管理器&#xff0c;搜送“TONGYI Lingma”&…

[C++]类的继承

一、什么是继承 1.定义&#xff1a; 在 C 中&#xff0c;继承是一种机制&#xff0c;允许一个类&#xff08;派生类&#xff09;继承另一个类&#xff08;基类&#xff09;的成员&#xff08;数据和函数&#xff09;。继承使得派生类能够直接访问基类的公有和保护成员&#xf…

【系统】Mac crontab 无法退出编辑模式问题

【系统】Mac crontab 无法退出编辑模式问题 背景一、问题回答1.定位原因&#xff1a;2.确认编辑器类型3.确保编辑器进入正确3.1 确认是否有crontab调度任务3.2 进入编辑器并确保编辑器正常3.3 保存操作 4.确认crontab任务存在 二、后续 背景 之前写过一篇&#xff1a;【系统】…

WPF系列一:窗口设置无边框

WindowStyle 设置&#xff1a;WindowStyle"None"&#xff0c;窗口无法拖拽&#xff0c;但可纵向和横向拉伸 <Window x:Class"WPFDemo.MainWindow.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x&quo…

售电公司办理全指南,开启能源新征程

一、售电公司的重要性 售电公司在能源市场中起着至关重要的作用&#xff0c;成为连接发电企业与终端用户的关键桥梁。随着经济的发展和生活水平的提高&#xff0c;电力需求持续增长&#xff0c;售电公司能够为满足这不断增长的需求提供更多选择。同时&#xff0c;在新电力技术…

JS使用random随机数实现简单的四则算数验证

1.效果图 2.代码实现 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</ti…

【记录】Django解决与VUE跨域问题

1 梗概 这里记录Django与VUE的跨域问题解决方法&#xff0c;主要修改内容是在 Django 中。当然其他的前端项目 Django 也可以这样处理。 2 安装辅助包 pip install django-cors-headers3 配置 settings.py INSTALLED_APPS [ # ... corsheaders, # ... ] 为了响应…

Sub-GHz无线通信技术,打造LPWAN的“最优解”

无线通信是指利用电磁波信号可以在自由空间中传播的特性进行信息交换的一种通信技术。近些年来&#xff0c;从便捷的手机通信到智能互联的家居系统&#xff0c;再到“万物互联”的物联网时代&#xff0c;无线通信技术都以其无处不在的身影&#xff0c;展现出了强大的生命力和无…

2D gaussian splatting的配置和可视化

继3D gaussian splatting&#xff0c;2D gaussian splatting除了渲染新视角&#xff0c;还能够生成mesh模型。 2D gaussian splatting的配置 两者的运行环境基本一致 GitHub - hbb1/2d-gaussian-splatting: [SIGGRAPH24] 2D Gaussian Splatting for Geometrically Accurate …

6、AI测试辅助-测试报告编写(生成Bug分析柱状图)

AI测试辅助-测试报告编写&#xff08;生成Bug分析柱状图&#xff09; 一、测试报告1. 创建测试报告2. 报告补充优化2.1 Bug图表分析 3. 风险评估 总结 一、测试报告 测试报告内容应该包含&#xff1a; 1、测试结论 2、测试执行情况 3、测试bug结果分析 4、风险评估 5、改进措施…

医学影像数据集汇总分享

医学影像数据集汇总分享 一、前言二、分类数据集2.1NIH Chest X-ray胸部X射线图像数据集2.2CC-CCII肺部CT图像数据集 三、定位数据集3.1NIH Chest X-ray胸部X射线图像数据集 四、分割数据集4.1CAMUS心脏超声图像数据集4.2CC-CCII肺部CT图像数据集4.3Shenzhen Hospital胸部X射线…

计算无人机俯拍图像的地面采样距离(GSD)矩阵

引言 在无人机遥感、测绘和精细农业等领域&#xff0c;地面采样距离&#xff08;Ground Sampling Distance&#xff0c;简称 GSD&#xff09;是一个非常重要的指标。GSD 是指图像中每个像素在地面上实际代表的物理距离&#xff0c;通常以米或厘米为单位。GSD 决定了图像的空间…

图变换器的再思考:谱注意力网络

人工智能咨询培训老师叶梓 转载标明出处 图神经网络&#xff08;GNNs&#xff09;的传统策略是通过稀疏的消息传递过程直接编码图结构。然而&#xff0c;这种方法存在固有的局限性&#xff0c;例如过度平滑和过度压缩问题&#xff0c;这些限制了模型的性能和表达能力。为了克服…

构建全面的生产监控体系:从基础设施到业务服务

在现代 IT 系统中&#xff0c;监控体系是确保高可用性、高性能和稳定性的核心工具。一个完善的监控体系能够及时发现系统问题、分析问题根源并快速采取应对措施&#xff0c;避免故障进一步扩散。本文将从基础设施层、中间件层、容器与编排层、应用与服务层逐步展开&#xff0c;…

Rk3588 FFmpeg 拉流 RTSP, 硬解码转RGB

RK3588 ,基于FFmpeg, 拉取RTSP,使用 h264_rkmpp 实现硬解码. ⚡️ 传送 ➡️ RK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGBRk3588 FFmpeg 拉流 RTSP, 硬解码转RGBUbuntu x64 架构, 交叉编译aarch64 FFmpeg mppRK3588 , mpp硬编码rgb, 保存MP4视频文件.</

进程通信方式---共享映射区(无血缘关系用的)

5.共享映射区&#xff08;无血缘关系用的&#xff09; 文章目录 5.共享映射区&#xff08;无血缘关系用的&#xff09;1.概述2.mmap&&munmap函数3.mmap注意事项4.mmap实现进程通信父子进程练习 无血缘关系 5.mmap匿名映射区 1.概述 原理&#xff1a;共享映射区是将文件…

【Redis篇】Set和Zset 有序集合基本使用

目录 Set 基本命令 sadd SMEMBERS SISMEMBER SCARD 返回值&#xff1a; SPOP SMOVE SREM 集合间操作 交集&#xff1a; 并集&#xff1a; 差集&#xff1a; ​编辑 内部编码 使用场景&#xff1a; Zset 有序集合 Zset基本命令 ZADD ZCARD ZCOUNT ZRANGE …