1. Realize batch writing of multiple statements
(Determine whether the field is null, and realize the existing data by id, then modify it and add it)
<insert id="batchInsertCdsProjectStage" parameterType="java.util.List">
<foreach collection ="list" item="item" index= "index" separator =";">
insert into cds_project_stage
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="item.stageName != null">stage_name,</if>
<if test="item.projectId != null">project_id,</if>
<if test="item.constrOrgId != null">constr_org_id,</if>
<if test="item.status != null">status,</if>
<if test="item.planStartTime != null">plan_start_time,</if>
<if test="item.actualStartTime != null">actual_start_time,</if>
<if test="item.planEndTime != null">plan_end_time,</if>
<if test="item.actualEndTime != null">actual_end_time,</if>
<if test="item.planExpenditure != null">plan_expenditure,</if>
<if test="item.actualExpenditure != null">actual_expenditure,</if>
<if test="item.overdue != null">overdue,</if>
</trim>
values
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="item.stageName != null">#{item.stageName},</if>
<if test="item.projectId != null">#{item.projectId},</if>
<if test="item.constrOrgId != null">#{item.constrOrgId},</if>
<if test="item.status != null">#{item.status},</if>
<if test="item.planStartTime != null">#{item.planStartTime},</if>
<if test="item.actualStartTime != null">#{item.actualStartTime},</if>
<if test="item.planEndTime != null">#{item.planEndTime},</if>
<if test="item.actualEndTime != null">#{item.actualEndTime},</if>
<if test="item.planExpenditure != null">#{item.planExpenditure},</if>
<if test="item.actualExpenditure != null">#{item.actualExpenditure},</if>
<if test="item.overdue != null">#{item.overdue},</if>
</trim>
ON DUPLICATE KEY UPDATE
<trim suffixOverrides=",">
<if test="item.stageName != null"> stage_name = #{item.stageName}, </if>
<if test="item.status != null">status = #{item.status},</if>
</trim>
</foreach>
</insert>
note:
SuffixOverrides="," in the tag will remove extra commas
2. One SQL implements batch insertion (no non-empty judgment)
insert into cds_project_stage ( stage_name,project_id,constr_org_id,status,plan_start_time,actual_start_time ,plan_end_time,actual_end_time,plan_expenditure,actual_expenditure,overdue )
values ( ?,?,?,?,?,? ,?,?,?,?,? ) , ( ?,?,?,?,?,? ,?,?,?,?,? )
<!--没有非空判断-->
<insert id="batchInsertCdsProjectStage" parameterType="java.util.List">
insert into cds_project_stage
(
stage_name,project_id,constr_org_id,status,plan_start_time,actual_start_time
,plan_end_time,actual_end_time,plan_expenditure,actual_expenditure,overdue
)
values
<foreach collection ="list" item="item" index= "index" separator =",">
(
#{item.stageName},#{item.projectId},#{item.constrOrgId},#{item.status},#{item.planStartTime},#{item.actualStartTime}
,#{item.planEndTime},#{item.actualEndTime},#{item.planExpenditure},#{item.actualExpenditure},#{item.overdue}
)
</foreach>
</insert>
note:
This efficiency is higher than the above. I
have not found a sql batch insert for the time being, and it is not empty to judge. If you have friends who know, please send a link in the comment area, thank you!!!