場景:批量插入如果數據存在則修改
使用ON DUPLICATE KEY UPDATE實現。實現該功能的關鍵在於,需要找到表的唯一性約束條件,即什麼時候是INSERT,什麼時候UPDATE。
# 增加唯一性約束SQL
ALTER TABLE table ADD UNIQUE uk_xxx (column)
ALTER TABLE table ADD UNIQUE uk_xxx_vvv (xxx,vvv)
SQL:
INSERT INTO table VALUES (),(),().... ON DUPLICATE KEY UPDATE column=VALUES(column),column=VALUES(column),column=VALUES(column)....
實戰:department表,批量插入數據如果存在則修改。
MySQL實現:
/**
* insert or update department.uk_code
* @param datas
* @return
*/
@Insert({ "<script>",
"INSERT INTO department(code, name, parent_id, owner, status) ", "VALUES",
"<foreach collection='departmentEntityList' item='departmentEntity' separator=','>",
"(#{departmentEntity.code}, #{departmentEntity.name}, #{departmentEntity.parentId}," +
"#{departmentEntity.owner}, #{departmentEntity.status})" +
"</foreach>",
"ON DUPLICATE KEY UPDATE name=VALUES(name), parent_id=VALUES(parent_id), owner=VALUES(owner), status=VALUES(status) ",
"</script>"})
Integer batchInsertOrUpdateDepartment(@Param("departmentEntityList") List<DepartmentEntity> datas);