昨天需要实现一个mybatis+MySQL的数据层接口,一条可以批量插入、更新的SQL语句,插入整个list,设置一个唯一的key,当表中有该条记录,就更新该记录,没有的就插入一条新纪录。下面给出具体的SQL语句:
<insert id="batchRefresh" parameterType="java.util.List">
insert into Fanxing_Template_Field (
id, io_type, component_type,
fargo_biz_key, create_time, updateTime
)
values
<foreach collection="list" item="item" separator=",">
(
#{item.id,jdbcType=INTEGER}, #{item.ioType,jdbcType=INTEGER}, #{item.componentType,jdbcType=INTEGER},
#{item.fargoBizKey,jdbcType=VARCHAR}, #{item.createTime,jdbcType=OTHER}, #{item.updatetime,jdbcType=OTHER}
)
</foreach>
ON DUPLICATE KEY UPDATE
fargo_biz_key = values(fargo_biz_key),
io_type = values(io_type),
component_type = values(component_type),
updateTime = values(updateTime);
注意写好每个字段的名字和类型就好,最后标红的字段,是你要更新的字段,这里我需要更新这五个字段,就赋值了五个。
虽然replace也可以实现,但使用 ON DUPLICATE KEY可以保持表中的自增主键ID保持不变!
如上,就实现了批量插入更新的功能,比较方便。
当然还可以通过
If exists
update
else
Insert
这样的形式去实现,更麻烦一点。