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(); ...
随机推荐
- Android SDK安装时出错“android Failed to rename directory”的解决方法
Android SDK安装时出错"android Failed to rename directory"的解决的方法 安装Android SDK时遇到Failed to r ...
- ubuntu 备份清理tomcat日志,并且删除七天之前的日志
创建文件clear_tomcat_log.sh #!/bin/bash logs_paths[0]="app_tomcat7_8080"; logs_paths[1]=" ...
- Linux系统防CC攻击自动拉黑IP增强版Shell脚本 《Linux系统防CC攻击自动拉黑IP增强版Shell脚本》来自张戈博客
前天没事写了一个防CC攻击的Shell脚本,没想到这么快就要用上了,原因是因为360网站卫士的缓存黑名单突然无法过滤后台,导致WordPress无法登录!虽然,可以通过修改本地hosts文件来解决这个 ...
- C# 系统应用之注冊表使用具体解释
在平时做项目时,我们有时会遇到注冊表的操作,比如前面我们须要获取IE浏览器地址栏的信息.获取"我的电脑"地址栏输入的目录信息.USB近期使用信息等.注冊表项是注冊表的基本组织单位, ...
- Android採用async框架实现文件上传
页面效果 须要的权限 <uses-permission android:name="android.permission.INTERNET"/> 网络訪问权限; 布局文 ...
- Nginx访问日志和错误日志的拆分(Logstash)
>> from zhuhaiqing.info input { file { type =>> "nginx-access" path =>> ...
- delphi 无边框窗体常见问题
实现无边框窗体很简单,直接将窗体的BorderStyle属性设置为bsNone即可.但是这样会引起2个问题: 1.在xp系统下,任务栏鼠标右键点击无法弹出菜单 解决办法:在FormShow中加入这个过 ...
- Python鸡汤
标准库 很正确 外部库 有一些风险,可能有bug,可能文档不全,可能长时间未更新. ipython 1 pip 这应该是安装Python后第一个需要的命令 pip install -i -i, --i ...
- python selenium2示例 - 日志管理
logger继承图 前言 在自动化测试实践过程中,必不可少的就是进行日志管理,方便调试和生产问题追踪,python提供了logging模块来进行日志的管理.下面我们就logging模块的学习和使用进行 ...
- Android ImageButton的使用。
1.首先是范例代码,一个基本的ImageButton响应. package com.example.arlxsdemo; import android.graphics.Bitmap; import ...