mybatis中使用foreach批量添加
条件:循环生成多个对象,将对象添加到数据库
mapper文件的sql语句
<insert id="insertUser" parameterType="java.util.Map">
insert into user
(user_id,user_name)
values
<foreach collection="addList" item="item" index="index" separator="," open="(" close=")" >
#{item.userId,jdbcType=VARCHAR},#{item.userName,jdbcType=VARCHAR}
</foreach>
</insert>
后端代码生成的对象
Map<String,Object> map=new HashMap<String,Object>();
List<User> list =new ArrayList<User>();
for(int i=1;i<=3;i++){
User user=new User();
user.setUserId(""+i);
user.setUserName(""+i);
list.add(user);
}
map.put("addList",list);
userMapper.insertUser(map);
生成多个User对象,将User对象添加到List中,然后放入Map执行添加
insert的传入参数是Map,所以放到Map中,foreach循环遍历传入的addList,collection表示传入的集合,(如果userMapper.insert(集合)传入的是list集合则名称是固定的list,如果传入的是array数组,名称也是固定的array,因为传入list或array是mybatis会将它包装在map中,list或array作为键名,集合作为值;传入map时就是键名)
item表示迭代时的别名,index表示下角标,separator表示批量插入时以逗号分割
open和close表示以 ”(” 开始以 ”)” 结束
执行完后,可以看到执行的sql语句格式,可以对照参考理解
执行的sql语句:
insert into user (user_id,user_name) values (userId,userName),(userId,userName),(userId,userName);