当前位置: 首页 > article >正文

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:当插入记录违反唯一键约束时,更新已存在的记录。


http://www.kler.cn/a/371986.html

相关文章:

  • 【网络】1.UDP通信
  • 【项目管理】PMP冲刺真题200题 (题目+解析)乱序版 【独一无二】
  • DBeaver如何导出insert的sql数据
  • 【windows】win10提示‘fastboot‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
  • java OOP 对象操作
  • SpringBoot+Shiro权限管理
  • 【论文阅读】Persistent Homology Based Generative Adversarial Network
  • CSS flex布局- 最后一个元素占满剩余可用高度转载
  • Rust 力扣 - 59. 螺旋矩阵 II
  • 正则表达式笔记
  • Windows目录共享到Linux
  • vue2和vue3在html中引用组件component方式不一样
  • 聊聊AI时代的新岗位
  • 软件测试-覆盖率测试-四关全
  • JavaScript的本地存储知识点详解Cookie、SessionStorage、LocalStorage、IndexedDB
  • SQL 数据汇总与透视的实用案例
  • mixin的基本用法
  • 达梦数据库创建oracle dblink
  • SUSE发布云安全行业趋势报告,中国市场释放积极信号
  • Google Recaptcha V2 简单使用
  • 【网络原理】——图解HTTPS如何加密(通俗简单易懂)
  • 【Pytorch】Pytorch的安装
  • 实现PC端和安卓手机的局域网内文件共享
  • OpenCV视觉分析之运动分析(5)背景减除类BackgroundSubtractorMOG2的使用
  • Oracle视频基础1.1.3练习
  • 《Linux系统编程篇》exec族函数——基础篇