批量插入更新的SQL實現
阿新 • • 發佈:2018-12-07
昨天需要實現一個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
這樣的形式去實現,更麻煩一點。