Mybatis 批量插入mysql

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批量插入,同时非空判断,如有知道的朋友,还请在评论区发个连接,谢谢啦!!!

猜你喜欢

转载自blog.csdn.net/weixin_42096620/article/details/110822911