1. 程式人生 > >批量插入更新的SQL實現

批量插入更新的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

這樣的形式去實現,更麻煩一點。