Mybatis batch insert mysql

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:

Insert picture description here
SuffixOverrides="," in the tag will remove extra commas
Insert picture description here

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:

Insert picture description here
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!!!

Guess you like

Origin blog.csdn.net/weixin_42096620/article/details/110822911