Mybatis 批量操作存在则更新或者忽略,不存在则插入

Mybatis 批量操作新增,如果存在重复有下列2种处理方式:

1、存在则忽略代码示例:

    <insert id="insertDuplicateKeyIgnoreList">
        INSERT IGNORE INTO specs(`status`,`type`,`code`,`name`,`create_time`,`create_by`)
        VALUES
        <foreach collection="list" item="item" separator=",">
            (  
                #{item.status,jdbcType=INT},
                #{item.type,jdbcType=INT},
                #{item.code,jdbcType=VARCHAR},
                #{item.name,jdbcType=VARCHAR},
                #{item.createTime,jdbcType=DATETIME},
                #{item.createBy,jdbcType=VARCHAR} )
        </foreach>
    </insert>

如果你想知道 INSERT IGNORE 实际影响了多少行,可以使用 SELECT ROW_COUNT():

如:

<insert id="insertDuplicateKeyIgnoreList">
        INSERT IGNORE INTO specs(`status`,`type`,`code`,`name`,`create_time`,`create_by`)
        VALUES
        <foreach collection="list" item="item" separator=",">
            (  
                #{item.status,jdbcType=INT},
                #{item.type,jdbcType=INT},
                #{item.code,jdbcType=VARCHAR},
                #{item.name,jdbcType=VARCHAR},
                #{item.createTime,jdbcType=DATETIME},
                #{item.createBy,jdbcType=VARCHAR} )
        </foreach>;

        SELECT ROW_COUNT();  -- 返回实际插入的行数
    </insert>

2、存在则更新代码示例:

     INSERT INTO specs(`status`,`type`,`code`,`name`,`create_time`,`create_by`)
        VALUES
        <foreach collection="list" item="item" separator=",">
            (   
                #{item.status,jdbcType=INT},
                #{item.type,jdbcType=INT},
                #{item.code,jdbcType=VARCHAR},
                #{item.name,jdbcType=VARCHAR},
                #{item.createTime,jdbcType=DATETIME},
                #{item.createBy,jdbcType=VARCHAR} )
        </foreach>
        ON DUPLICATE  KEY UPDATE
        <trim prefix="" suffixOverrides=",">
            <foreach collection="list" separator="," item="item">
                <if test="item.name != null and item.name != ''">
                    `name` = VALUES(name)
                </if>
            </foreach>
        </trim>

 ON DUPLICATE KEY UPDATE 语句中的“重复键”是指那些定义了唯一性约束的列。这些列可能是:

1. 主键(PRIMARY KEY):表中的主键必须是唯一的。

2. 唯一索引(UNIQUE INDEX):除了主键之外,还可以定义唯一索引,保证某些列的组合是唯一的。

当插入的数据在这些唯一性约束列上与现有数据发生冲突时,MySQL 将不会插入新的记录,而是根据 ON DUPLICATE KEY UPDATE 子句进行相应的更新操作。

总结

INSERT IGNORE:当插入记录违反唯一键约束时,忽略该记录,并继续处理其他记录。

ON DUPLICATE KEY UPDATE:当插入记录违反唯一键约束时,更新已存在的记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值