1、自定义对象集合(多字段),批量插入:
service代码:
List<User> list = new ArrayList<User>();
......
dao.saveWithKey("com.test.mapper.TestMapper.addUsers", list);
Mapper中:
<insert id="addUsers" parameterType="java.util.List">
insert into test_user(name, age) values
<foreach collection="list" item="item" separator=",">
(#{item.name}, #{item.age})
</foreach>
</insert>
2、基础对象集合(单字段),作为条件:
service中的代码:
List<String> ids = Arrays.asList(param.split(","));
return dao.getList("com.test.mapper.TestMapper.getUsers", ids);
Mapper中:
<select id="getUsers" parameterType="java.util.List" resultType="java.util.Map">
select * 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个:beginTime, endTime, list,其中list是一个List<String>
service中代码:
List<String> names= getUserNames();
Map<String, Object> params = new HashMap<String, Object>();
params.put("beginTime", beginTime);
params.put("endTime", endTime);
params.put("names", names);
dao.getList("com.test.mapper.TestMapper.getUsers", params);
Mapper中代码:
<select id="getUsers" resultType="java.util.HashMap">
select * from test_user
<where>
<if test="list != null">
and name IN
<foreach collection="list" item = "item" separator="," open="(" close=")">
#{item}
</foreach>
</if>
<if test="beginTime!=null and beginTime != ''">
and create_time <![CDATA[ >=]]>#{beginTime}
</if>
<if test="endTime !=null and endTime != ''">
and create_time <![CDATA[ <=]]>#{endTime}
</if>
</where>
</select>
<foreach>中各个属性的含义:
collection:指定要遍历的集合:
List类型的参数会特殊处理封装在map中,map的key就叫list ;
item:将当前遍历出的元素赋值给指定的变量 ;
separator:每个元素之间的分隔符 ;
open:遍历出所有结果拼接一个开始的字符 ;
close:遍历出所有结果拼接一个结束的字符 ;
index:索引。遍历list的时候是index就是索引,item就是当前值 ;
遍历map的时候index表示的就是map的key,item就是map的值;