• A+

MyBatis动态sql中foreach的简单使用

1、批量插入:

service代码:

 

Collection<HashMap<String, String>> collection = this.cocMap.values();
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(collection);
dao.saveWithKey("com.test.mapper.TestMapper.addCocs", list);
Mapper中:

 

<insert id="addCocs" parameterType="java.util.List">
insert into test_table(vin, engine_no, color) values
<foreach collection="list" item="item" separator=",">
(#{item.vin}, #{item.engine_no}, #{item.color})
</foreach>
</insert>

2、作为条件:

service中的代码:

 

List<String> ids = Arrays.asList(param.split(","));
return dao.getList("com.test.mapper.TestMapper.getImages", ids);
Mapper中:

 

<select id="getImages" parameterType="java.util.List" resultType="java.util.Map">
select vin,IFNULL(img,'') img from test_table where is_deleted = 0
<if test="list != null">
and id in
<foreach collection="list" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
</select>
 

3、list作为其中一个参数,例如查询条件有3个:bTime, eTime, list,其中list是一个List<String>

service中代码:

 

List<String> users = getUsers();
Map<String, Object> params = new HashMap<String, Object>();
params.put("bTime", bTime);
params.put("eTime", eTime);
params.put("list", users);
dao.getList("com.test.mapper.TestMapper.getImages", params);
Mapper中代码:

<select id="getImages" resultType="java.util.HashMap">
select * from test_table
<where>
<if test="list != null">
and opt_user IN
<foreach collection="list" item = "item" separator="," open="(" close=")">
#{item}
</foreach>
</if>
<if test="bTime!=null and bTime != ''">
and opt_time <![CDATA[ >=]]>#{bTime}
</if>
<if test="eTime!=null and eTime != ''">
and opt_time <![CDATA[ <=]]>#{eTime}
</if>
</where>
</select>
<foreach>中各个属性的含义:

collection:指定要遍历的集合:  

List类型的参数会特殊处理封装在map中,map的key就叫list ;

item:将当前遍历出的元素赋值给指定的变量 ;

separator:每个元素之间的分隔符 ;

open:遍历出所有结果拼接一个开始的字符 ;

close:遍历出所有结果拼接一个结束的字符 ;

index:索引。遍历list的时候是index就是索引,item就是当前值 ;

遍历map的时候index表示的就是map的key,item就是map的值;

 


注意:本文归作者所有,未经作者允许,不得转载
所属分类:后台

全部评论: 0

    我有话说:
    ×