1. INSERT ... ON DUPLICATE KEY UPDATE
例如:表(group_project)中有ID列(primary key )和project_id列(unique key),如果記錄在表中已經存在,則影響行數是0
void bindProjectInfo(@Param("groupId") Long groupId, @Param("list") List<Long> resProjectIds);
<insert id="bindProjectInfo">
INSERT INTO group_project (project_id, group_${groupId}) VALUES
<foreach collection="list" item="projectId" index="index" separator=",">
(#{projectId}, #{groupId})
</foreach>
ON DUPLICATE KEY UPDATE group_${groupId} = #{groupId}
</insert>
解釋(針對單條數據而言):記錄插入時,有唯一鍵,沒有主鍵字段列,如果出現重復,就執行更新操作,相當於UPDATE group_project SET group_${groupId} = #{groupId} WHERE project_id = #{peojectId},影響行數是2;否則執行新增操作,影響行數是1。
void bindProjectInfo(@Param("id") Long id, @Param("groupId") Long groupId, @Param("list") List<Long> resProjectIds);
<insert id="bindProjectInfo"> INSERT INTO group_project (id, project_id, group_${groupId}) VALUES <foreach collection="list" item="projectId" index="index" separator=","> (#{id}, #{projectId}, #{groupId}) </foreach> ON DUPLICATE KEY UPDATE group_${groupId} = #{groupId}
</insert>
解釋(針對單條數據而言):記錄插入時,有主鍵和唯一鍵列,如果出現重復,就執行更新操作,相當於UPDATE group_project SET group_${groupId} = #{groupId} WHERE id = #{id} OR project_id = #{peojectId} limit 1,影響行數是2;否則執行新增操作,影響行數是1。