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代理开发后,可以通过包扫描方式来进行简化加载映射文件

如下:

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

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

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

相关文章

ubuntu22.04编译安装Opencv4.8.0+Opencv-contrib4.8.0教程

本章教程,主要记录在Ubuntu22.04版本系统上编译安装安装Opencv4.8.0+Opencv-contrib4.8.0的具体过程。 一、下载opencv和opencv-contrib包 wget https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip wget https://github.com/opencv/opencv_contrib/archive/refs/…

使用C语言连接MySQL

库的准备 要使用C语言连接mysql&#xff0c;需要使用mysql官网提供的connect库&#xff0c;可以去官网下载&#xff0c;由于我们要下载到 Linux 操作系统中&#xff0c;也可以使用如下指令进行安装库 sudo apt-get install libmysqlclient-dev MySQL连接C/C的库通常会安装在/us…

【Android学习】RxJava

文章目录 资料连接1. Merge & Zip操作符: 合并数据源2. Map & FlapMap & ConcatMap & Buffer: 变换操作符3. retry & retryUntil & retryWhen : 错误处理操作符4. Transformer & Compose 转换操作符5. 网络请求嵌套回调 FlatMap6. 网络请求出错重连…

Mac配置 Node镜像源的时候报错解决办法

在Mac电脑中配置国内镜像源的时候报错,提示权限问题,无法写入配置文件。本文提供解决方法,青测有效。 一、原因分析 遇到的错误是由于 .npm 目录下的文件被 root 用户所拥有,导致当前用户无法写入相关配置文件。 二、解决办法 在终端输入以下命令,输入管理员密码即可。 su…

PyTorch基础入门

目录 前言一、[张量的广播&基本运算](https://www.bilibili.com/video/BV1Gg411u7Lr/?spm_id_from333.999.0.0)1. 张量的广播特性2. 逐点&规约&比较运算 二、张量的线性代数运算1. BLAS & LAPACK2. 矩阵形变及特殊矩阵构造3. 矩阵基本运算4. 矩阵的线性代数运…

【VSCode】常用插件汇总

1 Path Autocomplete&#xff08;路径提示的插件&#xff09; 步骤一&#xff1a;在vscode的扩展搜索中直接搜索Path Autocomplete&#xff0c;直接安装 步骤二&#xff1a;配置 配置 VS Code settings.json "path-autocomplete.pathMappings": {"": &q…

IOS通过WDA自动化中遇到的问题

IOS自动化遇到的问题 搭建WDA环境中遇到的问题1、XCode unsupport iphone xxx.2、创建Bundle Identifier出现问题&#xff1a;Communication with Apple failed3、创建Bundle Identifier出现问题&#xff1a;Automatic signing failed \Signing certificate is invalid4、创建B…

(六)- DRM驱动开发(qcom)

一&#xff0c;Linux Android Display 1&#xff0c;Linux Android Display Software Subsystem 密 2&#xff0c;Linux Android Display Architecture 密 二&#xff0c;DRM/KMS Adreno DPU 1&#xff0c;硬件框图 密 1.1 Qualcomm Adreno DPU 8-Series Overview 密 …

游戏AI实现-寻路算法(GBFS)

贪婪最佳优先算法是宽度优先遍历和贪婪算法结合的产物&#xff0c;使用启发式函数选择当前最低代价的节点&#xff0c;改善了宽度优先遍历需要遍历地图的大量节点来找寻结果的缺点。 算法过程&#xff1a; 1.首先设置开始节点的启发函数值&#xff08;h&#xff09;为0&#…

[Unity]Unity跨平台开发之Android简介

Android要求和兼容 图形接口支持 注意&#xff1a; 新的 Unity 项目默认不支持 OpenGL ES 2.0。 由于硬件和图形 API 的限制&#xff0c;并非所有渲染管道都与 Android 兼容。 图片压缩 Android标准压缩格式是ETC和ASTC。Unity默认压缩格式是ASTC。如果Android设备不支持您选…

监控易在汽车制造行业信息化运维中的应用案例

引言 随着汽车制造行业的数字化转型不断深入&#xff0c;信息化类IT软硬件设备的运行状态监控、故障告警、报表报告以及网络运行状态监控等成为了企业运维管理的关键环节。监控易作为一款全面、高效的信息化运维管理工具&#xff0c;在汽车制造行业中发挥着重要作用。本文将结合…

Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】

竣工测量是建筑项目竣工阶段的一个至关重要的环节&#xff0c;它为建筑工程的质量验收和成果核查提供了核心的参考依据。传统的竣工测量方法&#xff0c;如全站仪测量&#xff0c;主要依赖于现场人工操作&#xff0c;存在一些明显的局限性&#xff0c;例如作业时间长、工作量大…

健康养生:拥抱生活的艺术

健康养生&#xff1a;拥抱生活的艺术 在快节奏的现代生活中&#xff0c;健康已成为我们最宝贵的财富。健康养生&#xff0c;不仅仅是一种生活方式的选择&#xff0c;更是一种对待生活的态度&#xff0c;它关乎于如何在日常中寻找到平衡&#xff0c;让身心得以滋养&#xff0c;…

【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】

目录&#x1f60b; <第1关&#xff1a;print 函数操作> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <第2关&#xff1a;转义字符使用> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <…

C++算法第九天

本篇文章我们继续学习c算法 目录 第一题 题目链接 题目展示 代码原理 暴力解法 二分解法 代码编写 第二题 题目链接 题目展示 代码原理 代码编写 重点回顾 朴素二分 非朴素二分 重点一 重点二 重点三 第一题 题目链接 153. 寻找旋转排序数组中的最小值 - 力…

Mysql学习笔记之SQL-2

上篇文章介绍了SQL语句的第一部分数据定义语言&#xff08;DDL)&#xff0c;这篇文章我们介绍SQL语句的第二部分&#xff0c;数据库操作语言&#xff08;DML&#xff09; 1.简介 DML全称&#xff08;Data Manipulation Language&#xff09;&#xff0c;用来对数据表中的数据…

opencv-python的简单练习

题目1.读取一张彩色图像并将其转换为灰度图。 import cv2 # 读取图片文件 img cv2.imread(./1.png)# 将原图灰度化 img_gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 输出图片 cv2.imshow(img,img) cv2.imshow(img_g,img_gray) # 进行阻塞 cv2.waitKey(0) 题目2&#xff1a;…

AOP实现操作日志记录+SQL优化器升级

文章目录 1.引入依赖1.sun-dependencies 指定依赖2.将sun-dependencies进行install3.sun-common-log引入依赖 2.sun-common-log代码实现1.LogAspect.java&#xff08;需要更改包时就修改Pointcut的切点表达式即可&#xff09;2.log4j2-spring.xml3.效果展示 3.SQL优化器升级1.目…

CH582F BLE5.3 蓝牙核心板开发板 60MHz RAM:32KB ROM:448KB

CH582F BLE5.3 蓝牙核心板开发板 60MHz RAM:32KB ROM:448KB 是一款基于南京沁恒&#xff08;WCH&#xff09;推出的高性能、低功耗无线通信芯片CH582F的开发板。以下是该开发板的功能和参数详细介绍&#xff1a; 主要特性 双模蓝牙支持&#xff1a; 支持蓝牙5.0标准&#xff0…

AI技术在演示文稿制作中的应用一键生成PPT

在快节奏的现代工作环境中&#xff0c;时间就是金钱。为了提高工作效率&#xff0c;许多专业人士都在寻找能够快速生成演示文稿&#xff08;PPT&#xff09;的工具。本文将探讨AI技术如何帮助用户自动生成演示文稿&#xff0c;从文案撰写到排版&#xff0c;最终输出成品&#x…