myBatis中使用Map进行遍历
myBatis中使用Map获取key, value的方式
第一次的配置
<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进行遍历的更多相关文章
- mybatis中的map.xml文件中sql语句需要分号吗?
mybatis中的map.xml文件中sql语句需要分号吗? :你是说sql介绍的分号吗?不需要的
- 【mybatis】mybatis中 返回map集合
关于mybatis返回map集合的操作: 1.mapper.xml中写一个查询返回map的sql <select id="findMap" parameterType=&qu ...
- Mybatis中返回Map
在Mybatis中,我们通常会像下边这样用: 返回一个结果 User selectOne(User user); <select id="selectOne" paramet ...
- Java中的map的遍历方法
public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...
- foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值
http://zhangxiong0301.iteye.com/blog/2242723 最近有个需求,就是使用mybatis时,向mysql中插入数据,其参数为map类型,map里面的key为列名, ...
- MyBatis中的Map
接口 int addUserMap(Map<String, Object> map); Mapper.xml <!-- Map比较灵活 传递的值为Map的key,可以为任何(野路子, ...
- Mybatis中使用循环遍历
Mybatis中传参数的方法 1.使用注解绑定,mapper.xml 对应方法 不需要指定 parameterType,(推荐使用注解绑定方式) 方法接口: List<CalculateIdea ...
- mybatis map foreach遍历
mybatis map foreach遍历 转至http://www.cnblogs.com/yg_zhang/p/4314602.html mybatis 遍历map实例 map 数据如下 Map& ...
- map在遍历数据的过程中删除数据不出错
// Iterator<Map.Entry<String,Long>> entries = Map.entrySet().iterator(); ...
随机推荐
- jquery load方式浏览器断点调试
jquery load的方式引入的,如果需要在浏览器中断点调试,需要在代码中使用debugger进行断点
- 渐进式 JPEG (Progressive JPEG)来提升用户体验
1.概述 jpg格式分为:Baseline JPEG(标准型)和Progressive JPEG(渐进式).两种格式有相同尺寸以及图像数据,扩展名也是相同的,唯一的区别是二者显示的方式不同. Base ...
- 将Latex tex文档转换成 word文档(下)
在上篇中我们介绍了一款将 tex 文件转换成 word 文件的工具 借用万能的搜索引擎,在 Google 上找到了更好的工具 它就是Pandoc 介绍 Pandoc 是由 John McaFarlan ...
- windows下忘记mysql超级管理员rootpassword的解决的方法
今天帮一个朋友找回了MYSQL的超级管理员ROOTpassword.開始输入命令的时候少打了个"点"害的折腾了几个小时.最终攻克了,写个教程,方便以后使用! 假设你是server是 ...
- sql server 集群配置
Windows server2003 + sql server2005 集群配置安装 一:环境 软硬件环境 虚拟3台windows server 2003主机.当中一台做域控DC,另外两台作为节点wi ...
- 我的_vimrc文件
""""""""""""""""&quo ...
- ”非常危险“的Linux命令
Linux命令是一种很有趣且有用的东西,但在你不知道会带来什么后果的时候,它又会显得非常危险.所以,在输入某些命令前,请多多检查再敲回车. rm –rf rm –rf是删除文件夹和里面附带内容的一种最 ...
- 安卓手机的后门控制工具SPADE
SPADE,一款安卓手机的后门控制工具,安全研究人员可以以此了解和研究安卓后门原理. 首先,我们从网站www.apk4fun.com下载apk文件,如ccleaner.然后,我们安装spade git ...
- Win8运行金山词霸2005的问题
一般是以下几种状况: 1.运行进入假死 2.取词模块报错 3.词库突然丢失 原因: 文件权限和注册表权限问题 解决方法: 进入"..\Kingsoft\PowerWord 2005\&quo ...
- shiro自定义拦截url
在实际项目上,我们针对不同的用户(guste,user,admin,mobile user)等等,需要进入不同的页面,比如,手机端用户需要进入Mobile/这个路径下的,这个时候,我们需要自定义拦截u ...