批量插入更新的SQL实现

昨天需要实现一个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

这样的形式去实现,更麻烦一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值