The article summary
1 Foreac标签的几个属性
属性 | 描述 |
---|---|
item | 循环体中的具体对象。支持属性的点路径访问,如item.ageitem.info.details。具体说明:在list和数组中是其中的对象,在map中是value。该参数为必选。 |
collection | 要做foreach的对象,作为入参时,List<?>对象默认用list代替作为键,数组对象有array代替作为键,Map对象用map代替作为键。当然在作为入参时可以使用@Param(“keyName”)来设置键,设置keyName后,list,array,map将会失效,而是使用@Param指定的别名。 除了入参这种情况外,还有一种作为参数对象的某个字段的时候。举个例子:如果User有属性List ids。入参是User对象,那么这个collection = "ids"如果User有属性Ids ids;其中Ids是个对象,Ids有个属性List id;入参是User对象,那么collection = "ids.id"上面只是举例,具体collection等于什么,就看你想对那个元素做循环。该参数为必选。 |
separator | 元素之间的分隔符,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。 |
open | foreach代码的开始符号,一般是(和close=")"合用。常用在in(),values()时。该参数可选。 |
close | foreach代码的关闭符号,一般是)和open="("合用。常用在in(),values()时。该参数可选。 |
index | 在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。 |
2 Foreach的实际使用
2.1 在xml中的写法
<insert id="insertBatch">
insert into nef_qos_package (qos_reference, mar_bw_ul, mar_bw_dl,mir_bw_ul, mir_bw_dl, create_time,update_time)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.qosReference,jdbcType=VARCHAR}, #{item.marBwUl,jdbcType=VARCHAR}, #{item.marBwDl,jdbcType=VARCHAR},
#{item.mirBwUl,jdbcType=VARCHAR}, #{item.mirBwDl,jdbcType=VARCHAR}, NOW(), NOW())
</foreach>
</insert>
2.2 实际打印的sql
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@2cf4d56f] will not be managed by Spring
==> Preparing: insert into nef_qos_package (qos_reference, mar_bw_ul, mar_bw_dl,mir_bw_ul, mir_bw_dl, create_time,update_time) values (?, ?, ?, ?, ?, NOW(), NOW()) , (?, ?, ?, ?, ?, NOW(), NOW()) , (?, ?, ?, ?, ?, NOW(), NOW()) , (?, ?, ?, ?, ?, NOW(), NOW()) , (?, ?, ?, ?, ?, NOW(), NOW())
==> Parameters: 第5个(String), 最大上行5(String), 最大下行5(String), 最小上行5(String), 最小下行5(String), 第6个(String), 最大上行6(String), 最大下行6(String), 最小上行6(String), 最小下行6(String), 第7个(String), 最大上行7(String), 最大下行7(String), 最小上行7(String), 最小下行7(String), 第8个(String), 最大上行8(String), 最大下行8(String), 最小上行8(String), 最小下行8(String), 第9个(String), 最大上行9(String), 最大下行9(String), 最小上行9(String), 最小下行9(String)
<== Updates: 5
3 Foreach标签的错误写法及打印结果
把括号写在了foreach标签中
<insert id="insertBatch">
insert into nef_qos_package (qos_reference, mar_bw_ul, mar_bw_dl,mir_bw_ul, mir_bw_dl, create_time,update_time)
values
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
#{item.qosReference,jdbcType=VARCHAR}, #{item.marBwUl,jdbcType=VARCHAR}, #{item.marBwDl,jdbcType=VARCHAR},
#{item.mirBwUl,jdbcType=VARCHAR}, #{item.mirBwDl,jdbcType=VARCHAR}, NOW(), NOW()
</foreach>
</insert>
==> Preparing: insert into nef_qos_package (qos_reference, mar_bw_ul, mar_bw_dl,mir_bw_ul, mir_bw_dl, create_time,update_time) values (?, ?, ?, ?, ?, NOW(), NOW()) , (?, ?, ?, ?, ?, NOW(), NOW()) , (?, ?, ?, ?, ?, NOW(), NOW()) , (?, ?, ?, ?, ?, NOW(), NOW()) , (?, ?, ?, ?, ?, NOW(), NOW())
==> Parameters: 第0个(String), 最大上行0(String), 最大下行0(String), 最小上行0(String), 最小下行0(String), 第1个(String), 最大上行1(String), 最大下行1(String), 最小上行1(String), 最小下行1(String), 第2个(String), 最大上行2(String), 最大下行2(String), 最小上行2(String), 最小下行2(String), 第3个(String), 最大上行3(String), 最大下行3(String), 最小上行3(String), 最小下行3(String), 第4个(String), 最大上行4(String), 最大下行4(String), 最小上行4(String), 最小下行4(String)
<== Updates: 5