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(); ...
随机推荐
- python调度框架APScheduler使用详解
# coding=utf-8 """ Demonstrates how to use the background scheduler to schedule a job ...
- python 第一个web程序
yum install python-setuptools easy_install pip pip install tornado yum install MySQL-python test.py里 ...
- Ajax系列之中的一个:ajax旧貌换新颜
什么是ajax? 什么是Ajax? Ajax就是Asynchronous +JavaScript+XML.中文翻译为:异步的javascript与XML,它是利用javascript语言和xml数据实 ...
- 在 Linux 系统下使用 PhotoRec & TestDisk 工具来恢复文件
当你在系统中有意或无意地使用 shift + delete 组合键.删除选项,或是清空回收站的方式来删除一个文件时,该文件的内容并没有从硬盘(或是其它存储设备)上直接销毁. 它仅仅是从系统的目录结构中 ...
- java 乱码问题解决思路
"编码一致的条件下,在处理运行正常的情况下,是不会出现乱码的",记住这句金言. 如上所说,如果编码一致是不会出现这种乱码问题,所以解决办法就是仔细再仔细的检查所设置的编码是否是一致 ...
- JS 手势长按代码
同时支持长按和点击事件,无依赖版 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- 【HBase基础教程】1、HBase之单机模式与伪分布式模式安装(转)
在这篇blog中,我们将介绍Hbase的单机模式安装与伪分布式的安装方式,以及通过浏览器查看Hbase的用户界面.搭建hbase伪分布式环境的前提是我们已经搭建好了hadoop完全分布式环境,搭建ha ...
- cxf + spring + maven 开发webservice
1.maven 配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...
- 题目1 : Farthest Point
时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 Given a circle on a two-dimentional plane. Output the integral ...
- 【PHP】富文本HTML过滤器:HTMLPurifier使用教程(防止XSS)
在编程开发时安全问题是及其重要的,对于用户提交的数据要进行过滤,XSS就是需要重视的一点,先说一下什么是XSS,简单来说就是用户提交数据(例如发 表评论,发表日志)时往Web页面里插入恶意javasc ...