我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mybatis 实现插入或更新数据功能,数据存在时只更新

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mybatis 实现插入或更新数据功能,数据存在时只更新

需求

提供一个接口,既能保证新数据的插入操作,又能在数据存在时进行数据更新操作

实现:on duplicate key update

在mysql中,提供有on duplicate key update 指令,该指令表示如果唯一索引(UNIQUE)或主键(PRIMARY KEY)出现重复值时,则执行更新操作;如果不存在唯一冲突,则执行插入操作。

on duplicate key update 指令只是MySQL特性。

实例:单行数据

创建数据表,建立主键约束PRIMARY KEY (ue_id)和唯一约束UNIQUE KEYedge_info_UN (unique_id)

CREATE TABLE `edge_info` (  `ue_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '设备id',  `unique_id` varchar(50) DEFAULT '' COMMENT 'MAC',  `temperature` varchar(500) DEFAULT '' COMMENT '温度',  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',  PRIMARY KEY (`ue_id`),  UNIQUE KEY `edge_info_UN` (`unique_id`)) ENGINE=InnoDB AUTO_INCREMENT=1261 DEFAULT CHARSET=utf8 COMMENT='边端信息心跳表';

insert语句末尾增加on duplicate key update 指令,当主键ue_id或unique_id重复时,会执行更新操作,否则执行插入操作。

<insert id="insertOrUpdateEdgeInfo" parameterType="EdgeInfo" useGeneratedKeys="true" keyProperty="ueId">        insert into edge_info        <trim prefix="(" suffix=")" suffixOverrides=",">            <if test="uniqueId != null">                unique_id,            if>            <if test="temperature != null">                temperature,            if>            <if test="createTime != null">                create_time,            if>            <if test="updateTime != null">                update_time,            if>        trim>        <trim prefix="values (" suffix=")" suffixOverrides=",">            <if test="uniqueId != null">                #{uniqueId},            if>            <if test="temperature != null">                #{temperature},            if>            <if test="createTime != null">                #{createTime},            if>            <if test="updateTime != null">                #{updateTime},            if>        trim>        on duplicate key update        <trim>            <if test="uniqueId != null">                unique_id = #{uniqueId},            if>            <if test="temperature != null">                temperature = #{temperature},            if>            <if test="createTime != null">                create_time = #{createTime},            if>            <if test="updateTime != null">                update_time = #{updateTime}            if>        trim>    insert>

实例:批量数据

同样采用上述表作为示例来讲解,在原来代码基础上增加foreach标签,代码如下。同样当主键ue_id或unique_id重复时,会执行更新操作,否则执行插入操作。

<insert id="batchInsertOrUpdateEdgeInfo" parameterType="EdgeInfo" useGeneratedKeys="true" keyProperty="ueId">        insert into edge_info(        unique_id, temperature, create_time, update_time       )       values       <foreach collection="edgeInfoList" item="edge" separator=",">       (       #{edge.uniqueId},            #{edge.temperature},            #{edge.createTime},            #{edge.updateTime}        foreach>        on duplicate key update        unique_id = values(unique_id),        temperature = values(temperature),        create_time = values(create_time),        update_time = values(update_time)    insert>

当批量插入数据量较大时,为了确保接口响应的性能,可以考虑将数据分批地批量插入,如5000条数据需要插入,我们可以将数据分成100行执行一次批量插入。

来源地址:https://blog.csdn.net/Ber_Bai/article/details/128076093

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mybatis 实现插入或更新数据功能,数据存在时只更新

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

大批量数据分批批量插入或更新(Mybatis+MySQL)

大批量数据分批批量插入或更新 在MySQL数据库的前提下,插入或更新大批量数据。首先批量插入需要考虑到以下几个因素: 数据库一次可以承受多大或者多少条数据的插入批量插入是否会占用Mysql资源太久,影响系统整体使用性能代码中的集合是否会造成
2023-08-30

MySQL之存在则更新,否则就插入数据

MySQLINSERT...ONDUPLICATEKEYUPDATE语法可实现存在则更新,否则就插入数据功能。它用于在主键或唯一索引冲突时执行更新操作。该语句能避免数据重复,轻松更新记录,且操作具有原子性。使用时需注意主键索引和列匹配,并考虑自增列更新情况。MySQL还提供其他选项如REPLACEINTO和UPSERT来处理此类场景。
MySQL之存在则更新,否则就插入数据
2024-04-02

MySQL实现数据批量更新功能详解

最近需要批量更新大量数据,习惯了写sql,所以还是用sql来实现,下面这篇文章主要给大家总结介绍了关于MySQL批量更新的方式,需要的朋友可以参考下
2023-02-11

MySQL如何实现数据批量更新功能

本篇内容主要讲解“MySQL如何实现数据批量更新功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL如何实现数据批量更新功能”吧!根据不同条件批量更新同一值这种场景直接通过update语
2023-07-05

Python实现mysql数据库更新表数据接口的功能

前言 昨天,因为项目需求要添加表的更新接口,来存储预测模型训练的数据,所以自己写了一段代码实现了该功能,在开始之前,给大家分享python 操作mysql数据库基础:#coding=utf-8 import MySQLdbconn= MyS
2022-06-04

vuex存储数组(新建,增,删,更新)并存入localstorage定时删除功能实现

这篇文章主要介绍了vuex存储数组(新建,增,删,更新),并存入localstorage定时删除,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-18

在数据库中更新插入不使用主键或唯一约束的行

在我 7 年的程序员职业生涯中,我大部分时间都是通过 orm 与 sql 交互。我发现 laravel 的 eloquent orm 的一个特别有用的功能是它的 updateorinsert() 方法:db::table('posts')-
在数据库中更新插入不使用主键或唯一约束的行
2024-10-19

编程热搜

目录