1 场景
mybatis批量操作数据库,无外乎两种,批量插入或者批量更新。
2 mysql表结构
CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(64) DEFAULT NULL,
`pwd` varchar(64) DEFAULT NULL,
`age` int DEFAULT NULL,
PRIMARY KEY (`id`)
);
3 批量insert
3.1 实现方式一
用mybatis实现sql:
insert into user(name, pwd, age) values ('zhansan','111',100);
insert into user(name, pwd, age) values ('lisi','111',90);
insert into user(name, pwd, age) values ('wangwu','111',60);
mapper.xml 文件
<insert id="addBatch" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" separator=";">
insert into user(name, pwd, age) values (#{item.name}, #{item.pwd}, #{item.age})
</foreach>
;
</insert>
3.2 实现方式二
用mybatis实现sql:
insert into user(name, pwd, age) values ('zhansan','111',100), ('lisi','111',90), ('wangwu','111',60)
mapper.xml 文件
<insert id="addBatch" parameterType="java.util.List">
insert into user(name, pwd, age) values
<foreach collection="list" item="item" separator=",">
(#{item.name}, #{item.pwd}, #{item.age})
</foreach>
</insert>
4 批量update
update user
set
name =case id
when 1 then 'name1'
when 2 then 'name2'
when 3 then 'name3'
END,
age =case id
when 1 then 10
when 2 then 20
when 3 then 30
END
where id in (1,2,3)
mybatis代码
<updateid="updateBatch"parameterType="java.util.List">
update user
<trim prefix="set" suffixOverrides=",">
<trim prefix="name =case" suffix="end,">
<foreach collection="list" item="item" index="index">
when id=#{item.id} then #{item.age}
</foreach>
</trim>
<trim prefix="age =case" suffix="end,">
<foreach collection="list" item="item" index="index">
when id=#{item.id} then #{item.age}
</foreach>
</trim>
</trim>
where id in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item.id}
</foreach>
</update>