这里运用的是Mysql的数据库.
1、批量增加。一般的批量插入.首先,先写出批量插入的原SQL
insert into table(field1,field2,field3) values ('aa','bb','cc'), ('dd','ee','ff')
所以可以运用Mybatis中的foreach来进行进行如上操作,只需要将循环的语句进行替换即可
<insert id="batchAddRoleMenu" parameterType="java.util.List">INSERT INTO table(
field1,
field2,
field3)
VALUES
<foreach collection="list" item="item" index="index" separator="," open="(" ,close=")">#{item.field1},#{item.field2},#{item.field3}
</foreach>
</insert>
2、批量删除.
一般的情况就是对多个Id进行删除,同样先写出sql语句
delete from table where id in (1,2,3).
所以只需要将需要循环的地方进行foreach替换即可。
<delete id="batchAddRoleMenu" parameterType="java.util.List">
DELETE FROM table
WHERE id IN
#{item.id}
</foreach>
</delete>
注意括号括循环语句外面。
3、批量修改,一种情况是指需要修改多个对象的一个值,另外一种是修改多个对象的多个值.
a.修改多个对象的一个值.先写出sql
update table set field = 0 where id in (1,2,3);
情况同上,foreach替换循环.
<update id="batchAddRoleMenu" parameterType="java.util.List">
UPDATE table
SET field = 0
WHERE id IN
#{item.id}
</foreach>
</update>
b.修改多个对象的多个值.各个值不相同. 一个想法能否用循环来操作多个语句如下。update table set field = 1,field2 = 2 where id = 1;
update table set field = 2,field2 = 3 where id = 2;
很遗憾,mybatis 不支持如上.
所以想另外一种情况,利用mysql 中的 case when then 来进行改写.先写出sql语句
update table
set field =
case id when 1 then 1
when 2 then 2
END
, field2 =
case id when 1 then 2
when 2 then 3
END
where id in (1,2)
将循环的地方进行替换即可.所以最终为
<update id="batchAddRoleMenu" parameterType="java.util.List">
UPDATE table
SET field =
WHEN #{item.id} THEN #{item.field}
</foreach>
, field2 =
<foreach collection="list" item="item" index="index" separator="," open="Case id" close="END">
WHEN #{item.id} THEN #{item.field2}
</foreach>
WHERE id IN
<foreach collection="list" item="item" index="index" separator="," open="(",close=")" >
#{item.id}
</foreach>
</update>