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

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.lryc.cn/news/467652.html

相关文章:

  • 「C/C++」C++ STL容器库 之 std::deque 双端队列容器
  • 一招教你解决Facebook广告账号问题
  • MySQL启动报错:InnoDB: Unable to lock ./ibdata1 error
  • Linux终端之旅: 打包和压缩
  • PDA手持机提升管理效率和准确性
  • C++ [项目] 愤怒的小鸟
  • 群控系统服务端开发模式-市场分析
  • 智能听诊器革新宠物健康监测
  • 2000-2023年上市公司绿色专利申请授权面板数据
  • vue使用xlsx以及file-saver进行下载xlsx文件以及Unit8Array、ArrayBuffer、charCodeAt的使用
  • 日语表目的的两个句型,柯桥成人零基础日语培训
  • 小程序中设置可拖动区域
  • 前端后台管理开发
  • GDAL+C#实现矢量多边形转栅格
  • Python 爬虫实战之爬拼多多商品做数据分析
  • 爬虫基础
  • HTML3D旋转相册
  • [linux]快速入门
  • 域3:安全工程 第6章 密码学与对称密钥算法
  • MySQL注入load_file常用路径
  • ubuntu20.04版本 快速安装 python3.11(宝宝级攻略)
  • DeepSeek AI 推出 Janus 自回归框架,统一视觉、文本理解与生成的创新解决方案
  • NORDIC nPM1100 是一款集成式电源管理
  • 深入RAG:知识密集型NLP任务的解决方案
  • vue-element-admin顶部导航栏的修改
  • 微信小程序 setData数据量过大的解决与分页加载的实现
  • 体育动画直播嵌入方式以及作用
  • 腾讯云轻量服务器Lighthouse的前世今生
  • java实现redis的消息发送和消费,类似kafka功能
  • 【软件设计】常用设计模式--代理模式