mybatis批量插入数据,数据存在时更新,不存在时插入

it2024-04-18  44

insert into taskm.task_backup(id,name, assignee_id, type_id, status, identifier, audit_status, create_time, modify_time,plan_begin_time, plan_end_time, auto_start, act_begin_time, act_end_time, material_id, estimated_workload, remaining_workload, finished_workload, qualified_workload, qualified_rate, workload_metric, completed_rate, create_user, assignee_type, priority, description, note, origin, origin_type, overtime, cmmon, delay_remark, company, department, appointer_id, finish_note, create_user_name, assignee_name, appointer_name, company_name, department_name, pause_reason, pause_reason_id, cancel_reason, cancel_reason_id, overtime_reason, maybe_overtime_reason, estimated_finish_time, total_time, group_status, parent_id, out_source, origin_id, first_level_sub_order_name, first_level_sub_order_id, second_level_sub_order_name, second_level_sub_order_id, modify_user, original_plan_begin_time, original_plan_end_time, pu_id) values <foreach collection="list" item="item" separator=","> (#{item.id},#{item.name}, #{item.assigneeId}, #{item.typeId}, #{item.status}, #{item.identifier}, #{item.auditStatus}, #{item.createTime},#{item.modifyTime},#{item.planBeginTime}, #{item.planEndTime}, #{item.autoStart}, #{item.actBeginTime}, #{item.actEndTime}, #{item.materialId}, #{item.estimatedWorkload}, #{item.remainingWorkload}, #{item.finishedWorkload}, #{item.qualifiedWorkload}, #{item.qualifiedRate}, #{item.workloadMetric}, #{item.completedRate}, #{item.creator}, #{item.assigneeType}, #{item.priority}, #{item.description}, #{item.note}, #{item.origin}, #{item.originType}, #{item.overtime}, #{item.cmmon}, #{item.delayRemark}, #{item.company}, #{item.department}, #{item.appointerId}, #{item.finishNote}, #{item.creatorName}, #{item.assigneeName}, #{item.appointerName}, #{item.companyName}, #{item.departmentName}, #{item.pauseReason}, #{item.pauseReasonId}, #{item.cancelReason}, #{item.cancelReasonId}, #{item.overTimeReason}, #{item.maybeOverTimeReason}, #{item.estimatedFinishTime}, #{item.totalTime}, #{item.groupStatus}, #{item.parentId}, #{item.outSource}, #{item.originId}, #{item.firstLevelSubOrderName}, #{item.firstLevelSubOrderId}, #{item.secondLevelSubOrderName}, #{item.secondLevelSubOrderId}, #{item.modifyUser}, #{item.originalPlanBeginTime}, #{item.originalPlanEndTime}, #{item.puId}) </foreach> on duplicate key update create_time=values(create_time)

Mybatis批量更新运用ON DUPLICATE KEY UPDATE ,如果记录不存在则插入,存在则更新。那么这个记录是否存在根据什么判断?规则如下:

如果你插入的记录导致UNIQUE索引重复,则认为这条记录存在。比如我创建表的时候设置的唯一索引为字段id,那么如果id重复时则执行更新,否则插入。当如果唯一索引为多个字段时如name,id,那么当name,id两个字段完全重复时候,此时就要执行更新语句。当然满足一部分唯一索引是不会触发更新操作的,此时会执行插入操作。

如果数据存在的话就会触发条件 ON DUPLICATE KEY UPDATE ,从而更新字段 create_time=values(create_time) 这里create_time是数据库中的格式而不是实体类中的createTime

最新回复(0)