Mybatis 示例之 foreach (下)

 

 

 

 

 

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

 

 

 

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

 

 

 

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

 

 

 

第一个简单例子:

 

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


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

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

 

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


大部分数据库是支持values()()这种形式的插入语句,可以插入多条。

 

 

下面再看一个select的例子:

 

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


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

 

 

上述SQL执行日志如下:

 

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

 

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

 

 

 

 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值