1. 实现多条语句批量写入
(判断字段是否为null,并通过id实现已有数据则修改无则新增)
<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>
注意:
标签中 suffixOverrides="," 会去掉多余的逗号去掉
2.一条sql实现批量插入(没有非空判断)
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>
注意:
这个效率高于上边的
暂时未找到一条sql批量插入,同时非空判断,如有知道的朋友,还请在评论区发个连接,谢谢啦!!!