mybatis批量插入数据,数据存在时更新,不存在时插入

oracle mybatis(Mergr into语句带序列)添加数据时如果数据存在就更新,如果不存在就插入 merge语法根据源表(也可是临时生成的表)对目标表进行查询匹配,匹配成功时执行更新操作,不成功时执行插入操作。1.基本语法:merge into 目标表 Tusing 源表 T1on (T.xx1 = T1.xx1 and T.xx2=T1.xx2/*匹配条件*/)when matched then update set    /*需要更新的字段*/    T.x = T1.x...when n... 阅读详情
<insert id="insertList">
    insert into oc_contract_item_expense_statistics (`statistics_datetime`, `statistics_json`, `store_id`, `parent_store_id`, `store_type`)
    values
    <foreach collection="list" item="item" index="index" separator="," >
      (#{item.statisticsDatetime}, #{item.statisticsJson}, #{item.storeId}, #{item.parentStoreId}, #{item.storeType})
    </foreach>
    ON DUPLICATE KEY UPDATE
    statistics_json=values(statistics_json), update_time=now()
  </insert>

上面mybatis写的sql实现了如果数据存在时则更新数据,不存在时插入数据

注意:

实现这种需求需要有唯一索引,我上面的代码中为 statistics_datetime 字段与 store_id 字段创建了联合唯一索引

如果数据存在的话就会触发条件 ON DUPLICATE KEY UPDATE ,从而更新字段 statistics_json=values(statistics_json), update_time=now()

mysql 记录不存在时插入 记录存在则更新的实现方法 相信很多人都需要用到这个语句,请看下文:(在4.1以后的版本才有效) 立即下载

相关推荐

RHCSA Linux环境搭建

安装Linux操作系统一般有三种方式:为了便捷方便高效,因此本人选择通过虚拟机来使用Linux操作系统。先在官网(Download VMware Workstation Pro)下载好VMware workstation pro软件,下载安装完成后,需要激活打开。下载版本不同,所需激活码也不同(激活码可在网络上查找)

weixin_68256171的博客 1421

Mybatis新增数据,存在就更新,不存在就添加

插入一条数据,存在则不操作,不存在就插入(必须现有唯一键) 使用insert ignore语句,例如插入数据: insert ignore into user_info (last_name,first_name) values ('LeBron','James'); 这样一来,如果表中已经存在last_name='LeBron'且first_name='James'的数据,就不会插入,如果没有就会插入一条新数据。 上面的是一种用法,也可以用 INSERT .... SELECT 来实现。 .

Hello World 1万+

VS2019配置Qt5.14.2开发环境全流程(含MSVC2017 64-bit选择指南)

本文详细介绍了在VS2019中配置Qt5.14.2开发环境的完整流程,特别针对MSVC2017 64-bit编译器的选择提供了专业建议。从环境准备、Qt安装配置到VS2019集成设置,逐步指导开发者完成开发环境的搭建,并提供了常见问题的解决方案和高级优化技巧,帮助开发者高效进行Qt开发。

weixin_29243279的博客 513

【Mybatis】日常错误总结(持续更新)

​在执行sql的时候,使用了自定义的分页, sql会自动拼接limit但是项目中配置了springboot的分页插件,只要自定义的sql中有pageSize和pageNum参数值,就会在执行之后自动加上limit, 这样就造成了两个limit ,导致sql报错,所以这种情况可以改个名字, 比如pSize和pNum, 这样拼接就行了​。

慕白Lee的博客 2万+

关于RTP时间戳以及播放器对时间戳的处理

首先,了解时间戳几个基本概念: 时间戳单位:时间戳计算的单位不是秒之类的单位,而是由采样频率所代替的单位,这样做的目的就是为了是时间戳单位更为精准。比如说一个音频的采样频率为8000Hz,那么我们可以把时间戳单位设为1 / 8000。 时间戳增量:相邻两帧之间的时间差(以时间戳单位为基准)。 采样频率: 有些地方也叫时钟频率,即 每秒钟抽取样本的次数,例如音频的采...

toshiba689的专栏 3052

【MATLAB】嵌入式ADC/DAC控制工程

摘要:本文针对嵌入式ADC/DAC应用中存在的量化误差、采样噪声、输出漂移等问题,提出基于MATLAB的仿真优化方案。通过构建完整的ADC/DAC仿真模型,实现了采样建模、数字滤波、误差校准和闭环控制仿真。方案采用滑动平均滤波抑制ADC噪声,双校准参数补偿DAC固有误差,并将算法轻量化移植至STM32平台。实测表明,该方案使ADC采样波动从±25mV降至±5mV,DAC输出偏差从42mV降至18mV,显著提升了模拟量交互精度和系统稳定性。整套方案资源占用低,适配各类嵌入式高精度控制场景,具有较高的工程应用价

unber的博客 649

Mybatis新增数据,存在就更新,不存在就添加,Mysql避免重复插入数据的4种方式

insertignore into 即插入数据时,如果数据存在,则忽略此次插入,前提条件是插入的数据字段设置了主键或唯一索引,测试SQL语句如下,当插入本条数据时,MySQL数据库会首先检索已有数据

蓝天 1万+

杰理AC695N系列芯片 LED7数码管使用教程

杰理AC695N数码管使用摘要 本教程介绍了杰理AC695N芯片驱动LED7数码管的实现方法: 硬件配置:支持7/12/13脚三种数码管类型,详细说明了7脚数码管的标准段码定义和GPIO接线方式。 软件设置: 通过修改配置文件启用LED7功能 配置GPIO引脚映射(PORTC/PORTA组) 选择与硬件匹配的真值表 层次架构:包含硬件层、驱动层、UI层和应用层的完整设计,支持数字、字符和图标显示功能。 实现要点包括正确配置引脚类型、选择真值表,并通过UI风格设置为LED7模式。

qq_42014563的博客 1346

Mybatis - 常用 SQL 语句设计思路及具体实现 - 数据存在则更新,不存在则插入、批量更新、批量插入、连表查询 + - 字段加减法

mysql 的存在就更新不存在就插入可由语法实现;不过只会检查添加列中有没有匹配到主键id和唯一索引的重复项;如果有重复项会在后进行修改指定的字段和内容;所涉及的唯一索引也是可以修改的;

Muxiu 5757

ACS运动控制器编程语言

ACS运动控制器采用SPiiPlusLanguage(SPL)作为核心编程语言,该语言基于C语法设计,内置丰富的运动控制指令,支持点位运动、插补等复杂控制。控制器提供专用开发工具SPiiPlusManager和ACSStudio,支持图形化编程与调试。同时兼容TCP/IP、EtherCAT等多种扩展接口,便于与上位机或PLC集成。使用时需注意实时性优先级、轴参数匹配等关键事项。官方文档和示例程序为开发者提供了完善的学习资源。

StevenChen的博客 618

Python爬虫实战:利用Playwright与反反爬技术抓取Crunchbase企业数据

在当今数据驱动的商业环境中,获取准确的企业信息对于市场分析、竞争情报和投资决策至关重要。Crunchbase作为全球领先的企业信息平台,包含了数百万家公司、投资者和关键人员的详细数据。本文将深入探讨如何使用Python最新爬虫技术Playwright,结合多种反反爬策略,高效抓取Crunchbase企业数据。我们将从爬虫基础概念讲起,逐步深入到高级技巧,并提供完整的代码实现,帮助读者掌握现代网络数据采集的核心技术。网络爬虫技术自互联网诞生以来经历了显著演变。

2201_76125261的博客 1833

mybatis使用批量更新以及有则更新无则插入

1、mybatis批量更新使用foreach 代码如下: @Update("&lt;script&gt;" + "&lt;foreach collection='list' separator=';' item='user' &gt;" + "UPDATE users SET " + "ROBOT_COUNT=#...

m0_37897396的博客 7435

华为OD机试真题2026双机位C卷 Java&Go 实现【用户入网定期复评】

用户开立支付账户,在开户完成后立即对用户进行一次风险模型评级,输出一个评分风险,评分范围1-100,等区间的分为5个等级,1-19为等级1,20-39为等级2,40-59为等级3,60-79为等级4,80-100为等级5,系统每天会任务对全量入网用户进行计算复评时间,输出评分给出新的风险等级。复评规则如下:

MISAYAONE的博客 148

ibatis批量处理

INSERT INTO HBT_CloudPrinter (DeviceNumber,ShopId,PrintNum,EnlargedFont,Status,Valid,AddTime,AddBy,UpdateTime,UpdateBy) VALUES (#printers[].deviceNumber#,#printers[].shopId#,#printers[].printNum#

小笨蛋赶快飞呀 427

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

mysql中on duplicate key update用法

mysql新增时Duplicate entry,自动变为更新

vulgarOr的博客 2956

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MySQL 当记录不存在时插入,当记录存在时更新

MySQL 当记录不存在时插入,当记录存在时更新  网上基本有三种解决方法。  第一种:  示例一:插入多条记录  假设有一个主键为 client_id 的 clients 表,可以使用下面的语句:  INSERT INTO clients  (client_id, client_name, client_type)  SELECT supplier_id, supp

把握自己。 1447

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

mysql中on duplicate key update用法(批量操作数据、存在更新,不存在则新增),附mybatis配置

1、应用场景 日常开发中,对于一个数据想做到存在即更新,不存在则新增,通常的做法是先查询数据库中是否存在对应的数据,如果存在就使用更新的方法,不存在就使用新增的方法 如果是单个数据,倒也没什么问题,但如果是批量数据的话,会消耗大量的资源来进行查询操作,这样就得不偿失了。 这种情况我们可以使用mysql提供的 on duplicate key update 来进行操作。 2、表结构和示例数据 3、使用ON DUPLICATE KEY UPDATE更新单条数据,如下表示需要更新name、gender、bir

雨落未成曲的博客 8113

MySQL insertOrUpdate 存在时更新,不存在时插入

对于可能经常更改,或者可能大批量更改的业务场景。个人不推荐使用这种方式,因为会导致主键跳跃。每次存在(即更新)时,主键会+1,也就是说如果你的表里有100w数据,当你更改的时候,每调用一次下面的方法,主键+1。也可能出现其实你数据只有100w,结果主键已经到200w甚至更多了。 如果你还决定要用这种方式,可以往下看。 前提:判断更新或者插入的条件是 表里的唯一索引是否冲突,比如插入主键值相同的...

Cappadocia_的博客 4064

ON DUPLICATE KEY UPDATE 当记录不存在时插入,当记录存在时更新

MySQL 当记录不存在时插入,当记录存在时更新网上基本有三种解决方法。第一种:示例一:插入多条记录假设有一个主键为 client_id 的 clients 表,可以使用下面的语句:INSERTINTOclients(client_id,client_name,client_type)SELECTsupplier_id,supplier_name,'advertising'FROMsup...

weixin_30666401的博客 231

mybatis新增,主键不存在插入,主键存在则更新,如果更新,更新的字段如果为空则不更新该字段

/** * 批量插入或修改 * @param cos * @return */ @Insert("<script>"+ "<foreach collection='cos' item='co' separator=';'>"+ "insert into bloc_alloca...

小小一只猿的博客 2827

MySQL实现批量插入更新upsert

以下语句实现MySQL批量插入更新功能。插入数据,如果数据库中主键已存在则更新on duplicate key update后的字段,主键不变。 <!-- 插入/更新设备列表 --> <insert id="upsertDeviceList" parameterType="java.util.List"> insert into meeting_device_t ...

Synup的博客 5851

Mybatis insert 批量导入 并对已存在数据进行更新

最近做的项目中,需要实现管理员批量导入用户数据,如果批量导入的数据中包含数据库已存在数据,则对数据库已存在数据进行更新;如果是新的数据,则直接插入。查了一下mysql,发现居然还有on duplicate key update的用法。...

m0_51963973的博客 1503

mybatis插入数据(无则插入有则更新)以及字段自增

分享的mybatis的常用的技巧之一,记录一下,方便下次忘记之后查找,好记性不如烂笔头。 我们可能在业务中会遇到增加一条记录,如果改记录存在的话,就更新里面的一些字段,如果没有则查询 1,增加唯一的约束(如果不是通过id) alter table realtime_inventory add unique(sku,store_id); //建立唯一的约束,通过这个判断是否存在 2,如果...

hongtaolong的博客 7784

merge into用法mysql_Oracle数据库merge into的使用,存在则更新,不存在则插入

1、在实际应用场景中,我们会用到:如果这条数据在表中,就更新数据;如果不存在这条数据,就插入这条数据。在oracle中,可以使用merge into实现,在mysql中可以使用ON DUPLICATE KEY UPDATE,这里只介绍oracle中的merge into实现方法,sql语法如下:merge into testtable t using dual on (t.id = '1')whe...

weixin_33736279的博客 794

mybatis 批量插入数据 如果存在则更新

mybatis insert or update 批量插入和更新

kui617019的博客 2074
上一篇: mongodb内嵌数组对象字段in查询
下一篇: mongoTemplate查询数据方式
hwmhehe
博客等级 码龄13年 86粉丝 106原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值