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(); ...
随机推荐
- 自己定义circle
写了一个还不错的自己定义控件.用来展示完毕度或能力值,程序中配置好所占百分比.图中就能够用外面的圆环来显示百分比,效果还是不错的~ watermark/2/text/aHR0cDovL2Jsb2cuY ...
- 深入解析alloc/retain/release/dealloc实现
首先通过GNUstep上得源码来叙述各个函数的实现(GNUstep是Cocoa框架的互换框架,二者的行为和实现方式很相似) GNUstep源码中NSObject类的alloc方法: id = obj ...
- lodash 展平数组 flatten flattenDeep
_.flatten(array) 向上一级展平数组嵌套 <!DOCTYPE html> <html lang="zh"> <head> < ...
- cpp学习笔记 1一个简单的小程序以及一些的知识点
今天买的cpp到了从今天開始又一次学习cpp如今发现学校发的书真的不怎莫样. <em>#include<stdio.h>//预处理命令 int main()/*第一个被调用的函 ...
- 【Excle】如何隐藏数据透视表中的错误值
如下:数据透视表出现错误 怎么解决呢 步骤 方法① 单击数据透视表任意单元格→数据透视表工具→分析→选项→勾选"对于错误值显示"→确定 方法② 右键→数据透视表选项(同样可以修改)
- 【Excle】使用&拼接,拼接后复制到文本编辑器存在引号(“”)问题
1.错误的操作 如下图:拼接 拼接后,复制到文本编辑器: 1.1错误原因 出现上述问题的原因:是由于在拼接字符串的时候, INSERT INTO CST(ID,NAME)values( 上述这段字符& ...
- jquery 插件:chosen
options 文档 https://harvesthq.github.io/chosen/options.html 官网: http://plugins.jquery.com/chosen/
- 使用transform和transition制作CSS3动画
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 设置VisualSVN在提交修改时必须输入一定数量的备注信息
我发现在使用SVN中,提交时,很多人不习惯填写备注信息,虽然在培训中.平时使用时多次提醒备注信息的好处,但是效果不大,每次提交时还是不写,或者随便写两字. 所以很有必要通过系统设置强制填写足够数量的备 ...
- IOS与安卓的远程调试
本地调试H5页面方案总结 http://www.jianshu.com/p/a43417b28280 Fiddler 手机抓包 http://blog.csdn.net/gld824125233/ar ...