Spring Boot + Mybatis项目实现多主键数据表的批量增加、批量删除操作
方法使用SQL语句中的foreach标签进行批量操作,在Spring Boot + Mybatis项目中只需要修改对应的Mapper.xml文件,将增加一条记录的SQL语句改为批量增加,将删除一条的记录的SQL语句改为批量删除。
SQL语句中foreach标签的使用介绍:
<delete id="deleteBatch">
delete from student where id in
<foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
说明: 调用deleteBatch这个方法传入的参数为数据表student中主键id号的list,然后通过foreach标签遍历这个list,进行批量删除操作。
eg: 获取到前端请求的参数list为:[{“id”: “1”},{“id”: “2”},{“id”: “3”}],那么会批量删除id号为1、2、3的记录。
补充: foreach标签中的属性使用
collection: collection属性的值有三个,分别为list、array、map,依次对应的参数类型为:List、数组、Map集合;
item: 表示在迭代过程中每一个字段的别名;
index: 表示在迭代过程中循环到的位置即下标索引;
open: 表示该语句以什么开始;
close: 表示该语句以什么结束;
separator: 表示迭代时每个元素之间以什么符合分隔;
批量增加
项目中对应的xml文件为:
<!--批量增加操作-->
<insert id="batchInsert">
INSERT INTO cluster_node_info
(CLUSTER_ID,NODE_NAME,HOST_NAME,HOST_IP,PORT,IS_VALID)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(#{item.cluster_id},#{item.node_name},#{item.host_name},#{item.host_ip},
#{item.port},#{item.is_valid})
</foreach>
</insert>
说明: 获取参数为存放数据记录的list集合,通过foreach标签迭代遍历批量进行增加操作
批量删除
单主键数据表的批量删除
<!--单主键批量删除-->
<delete id="deleteList">
delete from cluster_node_info
where cluster_id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item.cluster_id}
</foreach>
</delete>
说明: 其中cluster_id是cluster_node_info表的唯一主键。
多主键数据表的批量删除
<!--批量删除-->
<delete id="deleteList">
delete from cluster_node_info
where
<foreach collection="list" item="item" index="index" separator="or">
(cluster_id = #{item.cluster_id}
and host_ip = #{item.host_ip}
and port = #{item.port})
</foreach>
</delete>
说明: 其中cluster_id、host_id、port为cluster_node_info表的主键,通过三个主键确定该条记录的唯一性,从而进行删除操作。