myBatis中使用Map获取key, value的方式
2021/10/30 23:44:01
本文主要是介绍myBatis中使用Map获取key, value的方式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
摘自:https://www.cnblogs.com/yissheng/p/9927519.html
第一次的配置
<trim prefix=" tags =case" suffix="end"> <foreach collection="_parameter.keys" item="item" index="i"> when (order_id=#{item}) then #{_parameter[item]} </foreach> </trim>
_parameter
由于我没有指定参数名,所以myBatis默认是使用这个做为参数的。
首先使用_parameter.keys
可以拿到所有的key,item这里就是key的值,取key的值可以直接用#{item}
,获取value不能直接用#{_parameter[item]}
,但是最后发现这样解析不到map对象
具体可参考BaseWrapper的resolveCollection方法
protected Object resolveCollection(PropertyTokenizer prop, Object object) { if ("".equals(prop.getName())) { return object; } else { return metaObject.getValue(prop.getName()); } }
因为传了_parameter之后,它会当成属性到map中去找,所以找不到,所以我又尝试了使用#{[item]},这样是可以拿到map对象,但是里面的[item]整个被当成了key,并没有被解析,所以我又换成了下面这种方式,就是把#换成$,试验成功。
<trim prefix=" tags =case" suffix="end"> <foreach collection="_parameter.keys" item="item" index="i"> when (order_id=#{item}) then ${[item]} </foreach> </trim>
为什么这两种方式差别这么大呢?这个应该是$和#的解析方式有关,那我们是不是还有其它方式解析成功呢,我又试了另外几种
可以解析成功
<trim prefix=" tags =case" suffix="end"> <foreach collection="_parameter.keys" item="item" index="i"> when (order_id=#{item}) then ${_parameter[item]} </foreach> </trim>
不能解析成功,这里我想主要是由于我没有使用自定义的参数,由于在外部指定了集合的名称,这种方式应该也是可以的。
<trim prefix=" tags =case" suffix="end"> <foreach collection="_parameter.keys" item="item" index="i"> when (order_id=#{item}) then #{_parameter[${item}]} </foreach> </trim>
可以解析成功
<trim prefix=" tags =case" suffix="end"> <foreach collection="_parameter.keys" item="item" index="i"> when (order_id=#{item}) then #{[${item}]} </foreach> </trim>
使用map.entrySet直接获取key, value
<trim prefix=" tags =case" suffix="end"> <foreach collection="_parameter.entrySet()" item="value" index="key"> when (order_id=#{key}) then #{value} </foreach> </trim>
毫无疑问使用第四种方式是最直接明了的,容易理解
前面的几种获取方式,主要问题应该是在表达式内部,myBatis把[]
当成了字符串,所以用[item]
也解析不了,使用#{[${item}]}
之后,就可以解析成功了。
这篇关于myBatis中使用Map获取key, value的方式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01为什么公共事业机构会偏爱 TiDB :TiDB 数据库在某省妇幼健康管理系统的应用
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署