MySql foreach属性

foreach属性

 

属性 描述
item 循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details。
具体说明:在list和数组中是其中的对象,在map中是value。
该参数为必选。
collection 要作foreach的对象,做为入参时,List<?>对象默认用list代替做为键,数组对象有array代替做为键,Map对象用map代替做为键。
固然在做为入参时能够使用@Param("keyName")来设置键,设置keyName后,list,array,map将会失效。 除了入参这种状况外,还有一种做为参数对象的某个字段的时候。举个例子:
若是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,该参数可选。
1.select count(*) from users id in (x1,x2,x3,...)
复制代码
<select id="countByUserList" resultType="int" parameterType="list">    
select count(*) from users    
  <where>    
    id in    
    <foreach item="item" collection="list" separator="," open="(" close=")" index="">    
      #{item.id, jdbcType=NUMERIC}    
    </foreach>    
  </where>    
</select> 
复制代码

2.循环插入表数据,用到dual伪表给数据作掩护。
insert into deliver (col1,col2,col3,col4,...) select col1,col2,col3,col4... from dual union all select col11,col22,col33,col44,... from dual。(字段col1,col2,col3,col4,...)添加
或者
insert into deliver select col1,col2,col3,col4,... from dual union all select col11,col22,col33,col44,... from dual。(所有字段添加)
复制代码
<insert id="addList">  
          
        INSERT INTO DELIVER  
            (  
                <include refid="selectAllColumnsSql"/>  
             )  
           
          <foreach collection="deliverList" item="item" separator="UNION ALL">  
                SELECT   
                     #{item.id, jdbcType=NUMERIC},  
                     #{item.name, jdbcType=VARCHAR}  
                FROM DUAL  
          </foreach>  
    </insert>  
复制代码

 

3.循环插入map值  insert into users(key,values) values(key1,values1),(key2,values3),(key3,values4)sql

<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> 

 

4.select count(*) from key_cols where col_a = ? AND col_b = ?数组

(必定要注意到$和#的区别,$的参数直接输出,#的参数会被替换为?,而后传入参数值,加上' '后执行。能够防止sql注入)app

<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>  

 

5.select * from t_news n where n.tags like ? or n.tags like ? spa

 <select id="selectTestForEach" parameterType="News" resultMap="NewsResultMapper">
  select * from t_news n where 
  <foreach collection="listTag" index="index" item="tag" open="" separator="or" close="">
             n.tags like  '%'||#{tag}||'%'
  </foreach>
 <select>
相关文章
相关标签/搜索