使用map类型的参数在mapper.xml中使用案例

使用map类型的参数在mapper.xml中使用案例

简介:在常见的开发中,对于参数的装载一般使用map类型方式,这样可以避免创建很多参数实体类,不管嵌套多层的数据参数都可以通过map拿取,对于嵌套多层的map,我们需要深层的一个集合在mapper.xml中遍历,如何拿到该值?
准备:
使用模拟请求数据:
在这里插入图片描述
这里,我需要拿到ids中的值进行遍历查找,但ids在aaa的下一层
后端接口,直接用map类型接收
在这里插入图片描述
然后直接看dao层
在这里插入图片描述

这里我先使用@Param注解
对应的mapper.xml的内容
在这里插入图片描述
解释:
m.aaa.ids:m是该参数名叫map的类型为map的数据的一个别名,这个别名是该@Param注解给的,用于mybatis框架区分dao层传入的多个参数(这里我只有一个)aaa是这个map类型的数据中最外层的key,通过m.aaa就进入了aaa的数据内容,ids是aaa中的,所以m.aaa.ids就进入了ids了,这里的m.aaa其实是类似于m.getProperty(“aaa”)这种,通过key-value的方式找到你需要的数据体内。
测试结果:
在这里插入图片描述
接下来我会一个个方式进行尝试看能否成功拿到ids,只改变dao层的参数和mapper.xml的获取ids方式
由于只有一个参数,我就不用@Param,也能找到,因为只有一个,不会产生歧义
在这里插入图片描述
在这里插入图片描述
这里我试图通过参数的名字map去找到ids,就是map.aaa.ids
结果:报错
在这里插入图片描述
在这里插入图片描述
根据报错信息可知:无法找到名叫aaa的数据,就是通过getProperty(“aaa”)找不到名叫aaa的东东
分析:dao层的map类型的名叫map的参数在mapper.xml中,mybatis是不认的,因为只有一个参数,他会直接打开map中的aaa所在的那一层,我这里aaa这一层的数据只有aaa这一个,下边我会弄多个,先暂时一个分析。
那么这个map.aaa.ids就和aaa.aaa.ids有点像,aaa中是没有名叫aaa的数据的,所以找不到,根据这个思路,这样写:aaa.ids会如何?
测试
在这里插入图片描述
在这里插入图片描述
成功到了ids层;
好,然后dao层我们试着用两个参数,当有多个参数后,默认有参数从左到右依次为param1,param2…的别名,这是mybatis自带的,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到成功了
分析:这里的param1其实就是和@Param注解取的别名一样都在map类型的数据的数据名称这一层,和上边的一个参数直接就打开了这一层进入到数据体不一样。
那如果有多层,然后外边也有多层如何拿到ids?
测试:
内部有多层
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/896fe8f7e1904c388e7f21114e8f73f8.png

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
成功,然后使用注解@Param拿ids

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
成功了,那如果外部传了多层,内部也是多层,如何取到ids?
测试:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
成功拿到
**总结:**我认为mapper.xml中的引用.,其实和通过key-value找值实质一样,比如aaa.bbb.ids的意思就是aaa通过getproperty(“bbb”)进入bbb层数据,然后bbb.getproperty(“ids”)进入ids层。
这里有点迷惑人的就是dao层如果只有一个参数,mapper.xml中会默认打开dao层的参数,直接进入该参数内,比如上边的例子,直接通过aaa.ids就行,不必再明确是dao层的那个参数名
然后其他的情况基本是一样的,都是通过dao层的参数名(可以是param1这种mybatis默认给的别名,也可以是@Param注解自定义别名),因为只有这样mybatis才知道你要从那个参数名中拿到参数名对应的数据体。
**结语:**有的时候弄这个会出现莫名的问题,这里就抽了时间做一个测试+总结,希望对大家有帮助

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

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

相关文章

day-33 收集垃圾的最少总时间

思路 利用一个二维数组(数组行数为3,分别对应三种垃圾)记录垃圾数量,arr[0][i]表示第i个房子的金属、纸和或玻璃垃圾。 解题方法 将三种垃圾数量(值与时间相同)相加,最后对应垃圾车最远需要走到…

stm32f103c8t6之4x4矩阵按键

基于普中精灵开发板 1、矩阵按键原理 当我们需要使用较多的按键时,单片机的IO口可能不够用,这是就需要使用矩阵按键。 对应IO口如下: 步骤解析: 1、全部按键都没有按下时,全行IO为低电平(全列对应的IO设置为下拉低…

免费SSL证书有效期现状

自2024年4月25日起,腾讯云上申请的免费SSL证书有效期将从原先的12个月调整为3个月。而在其他平台,比如Gworg,已经有策略表明将停止签发1年期的免费SSL证书,转而仅提供有效期为3个月的证书。 目前,免费SSL证书的有效期…

docker(三):常用命令

0、启动命令 1、启动docker systemctl start docker2、停止docker systemctl stop docker3、重启docker: systemctl restart docker4、查看docker状态 systemctl status docker5、开机启动: systemctl enable docker6、查看docker概要信息 docker…

综合能力 | 误差 | 学习笔记

误差指真值与观测值的差值。 误差分为系统误差(消除方法:观测方法、仪器校正、修正等)、偶然误差(符合正态分布规律,进行计算纠正)、粗差(一般舍弃)。 中误差(均方差或标…

代码随想录算法训练营第二十天:二叉树成长

代码随想录算法训练营第二十天:二叉树成长 110.平衡二叉树 力扣题目链接(opens new window) 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝…

内容安全(AV)

防病毒网关(AV)简介 基于网络侧 识别 病毒文件,工作范围2~7层。这里的网关指的是内网和外网之间的一个关口,在此进行病毒的查杀。在深信服中就有一个EDR设备,该设备就是有两种部署,一个部署在网关&#xf…

mybatisPlus一个事务中切换数据源概述

概述 在多数据源的配置下,业务中经常遇到在一个被本地事务包裹的save/edi方法中需要查询另一个数据源的数据; 直接查询会提示table不存在,这是因为一个事务和一个mysql连接是绑定的,mysql的连接背后包含了数据库信息,…

[AutoSar]lauterbach_001_ORTI_CPUload_Trace

目录 关键词平台说明一、ORTI概述二、ORTI文件的生成三、ORTI文件的导入四、Trace 功能4.1 Trace 功能菜单介绍4.2 Trace功能的配置4.3 Trace MCDS 设置4.4 Task Switches断点的设置4.5 Trace 数据的录取4.6 CPU 负载和Task调度的查看 关键词 嵌入式、C语言、autosar、OS、BSW…

如何禁止打开PDF文件?推荐2种方法!

在工作中,我们经常会使用到PDF文件,对于重要的文件,不想被随意打开怎么办呢?下面小编分享2个方法,第二个很实用,记得收藏起来! 方法1:设置密码保护 我们可以通过PDF编辑器&#xff…

人脸识别之bbox【det_10g】-ncnn(c++)

模型描述 det_10g是insightface 人脸框图和人脸关键点的分类,最终能够得到人脸框图bbox,分值还有人脸五官(眼x2、鼻子x1、嘴巴x2) 由于我这里没有采用最终结果,通过onnx转换为ncnn,所以后面的步骤结果丢弃…

测斜仪的具体应用:从地下工程到斜坡监测

测斜仪作为一种精密的测量工具,在多个领域都有广泛的应用。从最初的地下工程,到现今的斜坡监测,测斜仪的技术进步和应用范围的扩大,为工程安全提供了有力的保障。 一、地下工程中的测斜仪应用 在地下工程中,测斜仪主要…