一、存在时则忽略

为什么在发现重复时会忽略?这里面涉及到两个地方。

1、重复则忽略。那么首先是需要判断是否重复,这里是通过唯一索引判断是否重复的。如果表中唯一索引的字段已经存在与将要插入的记录行中唯一索引的字段值相同,则标识为重复。

MySQL 中建立唯一索引:ALTER TABLE ‘tableName’ ADD UNIQUE (‘column’);

如下面的代码块中的 ght_replace 表的 oldnumber 字段建立唯一索引:

ALTER TABLE ght_replace ADD UNIQUE (oldnumber);

2、通过在SQL语句中的 IGNORE 关键字标识,如果相同,则该条记录行不插入。

如下面的代码块中所示:

@Insert({"<script>","insert ignore into ght_replace(oldnumber, newnumber)","values","<foreach item ='item' collection = 'andOldVoList' separator = ','>","(#{item.oldnumber}, #{item.newnumber})","</foreach>","ON DUPLICATE KEY UPDATE oldnumber = VALUES(oldnumber)","</script>"})int batchInsert(@Param("andOldVoList")List<NewAndOldVo> andOldVoList);

二、存在时则更新

@Insert({"<script>","insert into telit_project_relation(project_name, inside_project_number)","values","<foreach item ='dataInfo' collection = 'projectRelationEntities' separator = ','>","(#{dataInfo.projectName}, #{dataInfo.insideProjectNumber})","</foreach>","ON DUPLICATE KEY UPDATE project_name = VALUES(project_name)","</script>"})int batchInsert(@Param("projectRelationEntities")List<TelitProjectRelationEntity> projectRelationEntities);

存在时则更新代码如上所示。存在则更新的关键在 "

ON DUPLICATE KEY UPDATE project_name = VALUES(project_name)

是数据库中列名,不是 entity 中的属性名

三、存在复合唯一索引时,批量插入,如果存在则更新

在使用符合唯一索引时也是一样的,首先需要的是唯一索引:

ALTER TABLE asus_bom_relationship ADD UNIQUE INDEX(byd_material_no, bydComponent);

/*** 批量插入功能** @param entityList* @return*/@Insert({"<script>","insert into asus_bom_relationship(material_no, byd_material_no, bom_component, bydComponent)","values","<foreach item ='dataInfo' collection = 'entityList' separator = ','>","(#{dataInfo.materialNo}, #{dataInfo.bydMaterialNo}, #{dataInfo.bomComponent}, #{dataInfo.bydComponent})","</foreach>","ON DUPLICATE KEY UPDATE byd_material_no = VALUES(byd_material_no), bydComponent = VALUES(bydComponent)","</script>"})int batchInsert(@Param("entityList") List<RelationShipEntity> entityList);

MySQL + MyBatis 批量插入时存在则忽略或更新记录相关推荐

  1. mysql批量添加报错_技术分享 | MySQL 在批量插入时捕捉错误信息

    原创: 杨涛涛 背景 本篇文章来源于今天客户问的一个问题. 问题大概意思是:我正在从 Oracle 迁移到 MySQL,数据已经转换为单纯的 INSERT 语句.由于语句很多,每次导入的时候不知道怎么 ...

  2. mybatis批量插入(insert)和批量更新(update)

    文章目录 一.Mybatis批量插入 二.批量更新 前言:这两天在做mybatis批量插入和更新的时候,对这块不是很清楚,所以今天写篇文章,巩固加深印象. 一.Mybatis批量插入 批量插入的sql ...

  3. MyBatis批量插入(sqlserver BULK INSERT)

    MyBatis批量插入: 1. foreach方式 2.sqlsession + sqlsession.flushStatements方式: //        SqlSession sqlSessi ...

  4. MyBatis - 批量插入

    由于MyBatis的本质是对JDBC的封装,所以从JDBC的原生来看此问题~ 一.原生JDBC插入两种方式 conn.setAutoCommit(false); //设置手动提交 //预编译sql对象 ...

  5. MyBatis 批量插入数据的 3 种方法

    批量插入功能是我们日常工作中比较常见的业务功能之一,之前我也写过一篇关于<MyBatis Plus 批量数据插入功能,yyds!>的文章,但评论区的反馈不是很好,主要有两个问题:第一,对 ...

  6. Mybatis 批量插入事物问题

    一.首先对于批量数据的插入有两种解决方案(下面内容只讨论和Mysql交互的情况) 1)for循环调用Dao中的单条插入方法 2)传一个List<Object>参数,使用Mybatis的批量 ...

  7. 公司新来个同事,MyBatis批量插入10w条数据仅用2秒,拍案叫绝!

    批量插入功能是我们日常工作中比较常见的业务功能之一,今天咱们来一个 MyBatis 批量插入的汇总篇,同时对 3 种实现方法做一个性能测试,以及相应的原理分析. 先来简单说一下 3 种批量插入功能分别 ...

  8. mysql如何优化性能优化_如何优化性能?MySQL实现批量插入以优化性能的实例详解...

    这篇文章主要介绍了MySQL实现批量插入以优化性能的教程,文中给出了运行时间来表示性能优化后的对比,需要的朋友可以参考下 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时 ...

  9. oracle批量插入报错,[数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA

    [数据库]Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA 0 2020-08-19 08:00:06 Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA-009 ...

最新文章

  1. arm remapping控制输入_解析机器视觉中运动控制卡与PLC的区别
  2. 解决pjax加载页面不执行js插件的问题
  3. php如何进修,PHP进修材料汇总华文_PHP教程
  4. java面试题(转载其他人,方便日常看)
  5. redis的主从数据库复制功能
  6. 我毕业一年后。生活的艰辛。我的程序人生该怎么走
  7. 【嵌入式模块】LCD1602LCD12864
  8. vb6 连接 mqtt 服务器
  9. web课程设计网页规划与设计 HTML+CSS+JavaScript仿英雄联盟LOL首页(1个页面)
  10. javascript案例26——求100以内所有7倍数之和
  11. xiunobbs装插件
  12. Android App应用启动分析与优化
  13. 机器学习——概率分类(三)高斯概率密度与混合高斯模型
  14. 算法导论(22.1):图的表示
  15. 介绍一下什么是大数据
  16. laradock 环境下,PHP 该如何实现本地域名通信啊?
  17. SpringCloud服务注册与发现
  18. 基于WF4.0的公文管理系统
  19. Vue父组件传子组件数据中,Vue监听不到数据改变
  20. 深度学习基础 Probabilistic Graphical Models | Statistical and Algorithmic Foundations of Deep Learning

热门文章

  1. 嵌入式Linux初始化硬件RTC,嵌入式Linux系统中的快速启动技术研究
  2. [转载] JAVA环境变量配置
  3. ScalavsKotlin
  4. python数值类型_Python数值类型
  5. 计算机如何输入ip地址,电脑如何切换ip地址_怎么让电脑切换ip地址-win7之家
  6. bba70_BBA的完整形式是什么?
  7. python字符串 切片_用于切片字符串的Python程序
  8. Java BigDecimal negate()方法与示例
  9. 惠普台式计算机系列,惠普发布设计笔记本、设计台式电脑等Z系列产品
  10. 病毒c语言代码大全,谁有C语言编写的病毒源代码?