ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

myBatis中使用Map获取key, value的方式

2021-10-30 23:31:10  阅读:202  来源: 互联网

标签:Map when value item key 解析 parameter id


摘自: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}]}之后,就可以解析成功了。

标签:Map,when,value,item,key,解析,parameter,id
来源: https://www.cnblogs.com/lyh233/p/15487971.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有