Mapper代理开发

news/2024/12/19 15:23:00/

引入

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.ppmy.cn/news/1556415.html

相关文章

TCP Analysis Flags 之 TCP Fast Retransmission

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

1688商品爬取:商品信息与价格接口获取指南

引言 在电商领域&#xff0c;获取商品信息和价格对于市场分析、价格监控和供应链管理至关重要。1688作为中国领先的B2B电商平台&#xff0c;提供了海量的商品数据。本文将详细介绍如何利用Java爬虫技术合法合规地获取1688商品信息和价格接口数据。 环境准备 在开始之前&…

FPGA高速下载器SZ901

SZ901基于AMD(Xilinx) Virtual Cable协议. 本设备使用千兆网络接口。基于此接口,本设备可以同时支持多达四路FPGA板卡同时调试,每组相互独立,互不干扰。 特点 1,支持JTAG 速度最高53Mb/s&#xff0c;电压范围1.2-3.3V,最高支持200cm排线 2,支持4路JTAG独立使用 3,支持多路…

半导体制造全流程

半导体制造是一个极其复杂且精密的过程&#xff0c;主要涉及将硅片加工成功能强大的芯片。以下是半导体制造的全流程概述&#xff1a; 1. 硅材料制备 硅提纯&#xff1a; 使用冶金级硅&#xff0c;进一步提纯为高纯度硅&#xff08;电子级硅&#xff09;&#xff0c;纯度可达 …

MIT S6081 2024 Lab 1 | Operating System | Notes

目录 安装与下载 实验1 开始我们的实验 sleep&#xff08;简单&#xff09; pingpong&#xff08;简单&#xff09; primes (中等)/(困难) find&#xff08;中等&#xff09; xargs&#xff08;中等&#xff09; finally Reference I. Tools Debian 或 Ubuntu Arch…

ubuntu 上怎么设置应用开机自动启动

方法 1: 使用 “启动应用程序” 工具 打开“启动应用程序”工具&#xff1a; 在 GNOME 桌面环境中&#xff0c;按 Super&#xff08;Windows&#xff09;键 或点击应用菜单&#xff0c;搜索并打开 “启动应用程序” 或 “Startup Applications”。 添加启动程序&#xff1a; 点…

STM32使用SFUD库驱动W25Q64

SFUD简介 SFUD是一个通用SPI Flash驱动库&#xff0c;通过SFUD可以库轻松完成对SPI Flash的读/擦/写的基本操作&#xff0c;而不用自己去看手册&#xff0c;写代码造轮子。但是SFUD的功能不仅仅于此&#xff1a;①通过SFUD库可以实现在一个项目中对多个Flash的同时驱动&#x…

利用开源Stable Diffusion模型实现图像压缩比竞争方法用更低的比特率生成更逼真的图像

概述 论文地址&#xff1a;https://studios.disneyresearch.com/app/uploads/2024/09/Lossy-Image-Compression-with-Foundation-Diffusion-Models-Paper.pdf 迪士尼的研究部门正在提供一种新的图像压缩方法&#xff0c;利用开源Stable Diffusion V1.2 模型&#xff0c;以比竞…