首页 > 其他 > 详细

Mybatis 示例之 foreach (下)

时间:2014-03-28 17:46:50      阅读:395      评论:0      收藏:0      [点我收藏+]

foreach是用来对3种类型的对象进行循环操作的,关于foreach的基础知识请看:Mybatis 示例之 foreach (上)


这节讲的是foreach中map的用法。


map和List,array相比,map是用K,V存储的,在foreach中,使用map时,index属性值为map中的Key的值。


因为map中的Key不同于list,array中的索引,所以会有更丰富的用法。


第一个简单例子:

<insert id="ins_string_string">
        insert into string_string (key, value) values
        <foreach item="item" index="key" collection="map"
            open="" separator="," close="">(#{key}, #{item})</foreach>
    </insert>

可以看到这个例子相当简单,表中需要两个值,正好和K,V对应,因而map中的一个K,V就对应一条数据,如果map中有多个K,V,就会保存多个结果。

如果map中有两对K,V,那么执行SQL如下:

DEBUG [main] - ==>  Preparing: insert into string_string (key, value) values (?, ?) , (?, ?) 
DEBUG [main] - ==> Parameters: key 1(String), value 1(String), key 2(String), value 2(String)
DEBUG [main] - <==    Updates: 2

大部分数据库是支持values()()这种形式的插入语句,可以插入多条(相关链接 - 可能需翻墙)。


下面再看一个select的例子:

<select id="sel_key_cols" resultType="int">
        select count(*) from key_cols where
        <foreach item="item" index="key" collection="map"
            open="" separator="AND" close="">${key} = #{item}</foreach>
    </select>

可以看到这里用key=value来作为查询条件,对于动态的查询,这种处理方式可以借鉴。一定要注意到$和#的区别,$的参数直接输出,#的参数会被替换为?,然后传入参数值执行。


上述SQL执行日志如下:

DEBUG [main] - ==>  Preparing: select count(*) from key_cols where col_a = ? AND col_b = ? 
DEBUG [main] - ==> Parameters: 22(Integer), 222(Integer)
DEBUG [main] - <==      Total: 1


最后,如果不考虑元素的顺序和map中Key,map和list,array可以拥有一样的效果,都是存储了多个值,然后循环读取出来。


如果有这方面的问题,欢迎留言提问。若有宝贵意见,欢迎指出。

Mybatis 示例之 foreach (下),布布扣,bubuko.com

Mybatis 示例之 foreach (下)

原文:http://blog.csdn.net/isea533/article/details/22336991

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!