今天开发的时候有个需求批量插入和更新,在网上搜了一写资料做个总结
按照传统的做法:
- 先查询数据库有没有对应的主键
- 没有找到主键则新增,找到主键则修改
但是这样写有两个问题
效率太差,每次执行都要执行2个sql
高并发的情况下数据会出问题,不能保证原子性
我们可以通过 ON DUPLICATE KEY UPDATE 达到以上目的, 且能保证操作的原子性和数据的完整性。
单条数据插入和更新
//新增or更新数据
public Boolean InsertOrUpdate_Info(MyInfo info);
<insert id="InsertOrUpdate_Info" parameterType="MyInfo">
insert into movieinfo
(id,title,type)
values
(#{id},#{title},#{type})
ON DUPLICATE KEY UPDATE
title = #{title},type = #{type}
</insert>
多条数据插入和更新
//批量新增or更新数据
public Boolean InsertOrUpdate_List(List<MyInfo> info);
<insert id="InsertOrUpdate_List" parameterType="MyInfo">
insert into UesrInfo (id,type,name)
values
<foreach collection ="list"