Springboot Mybatis 不存在插入数据,存在则更新数据

news2024/11/20 2:10:39

前言

是不是经常看到代码, 查一下数据库,如果存在数据,就做更新语句调用; 如果不存在,就插入。

今天该篇介绍的 是使用 

   INSERT INTO
   
   ON DUPLICATE KEY UPDATE

   
   来实现我们上述的场景, 不需要自己再判断来判断去的。

正文

ON DUPLICATE key update

是根据主键索引或者唯一索引字段是否重复来判断是否执行,如果重复则执行update,否则则执行insert。

优先级主键>唯一索引

当主键重复时则执行update
当主键不重复,唯一索引重复时也执行update
当主键和唯一索引值都不重复才执行insert
 

取决于我们写的sql带没带主键或者唯一索引。

开搞 ,举个例子 ,角色数据,角色编码 CODE 是唯一的, 然后我们角色名称和使用状态是允许修改编辑的。

 

简单贴下代码 :

实体Role:
 

@Data
@Accessors(chain = true)
public class Role {

    private Integer id;
    private String  code;
    private String name;
    private Integer status;
}

mapper :

/**
 * @author JCccc
 */
@Mapper
public interface RoleMapper {

   void insertOrUpdate (Role role);

}

mapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.dotest.mapper.RoleMapper">
    <resultMap id="BaseResultMap" type="com.example.dotest.entity.Role">
        <result column="ID" property="id" jdbcType="INTEGER"/>
        <result column="CODE" property="code" jdbcType="VARCHAR"/>
        <result column="NAME" property="name" jdbcType="VARCHAR"/>
        <result column="STATUS" property="status" jdbcType="INTEGER"/>
    </resultMap>
    <insert id="insertOrUpdate" parameterType="com.example.dotest.entity.Role">

         INSERT INTO `product` (code,name,status)

         VALUES (#{code,jdbcType=VARCHAR},#{name,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER})

         ON DUPLICATE KEY UPDATE name =#{name,jdbcType=VARCHAR} ,status=#{status,jdbcType=INTEGER};

       </insert>
</mapper>

简单介绍下:

 

实践看看效果 :

当前数据

 

执行下调用,新增一个角色 :
 

 

可以看到数据新增了,所以触发的是 insert into  因为数据库里面刚才确实不存在 角色code为 ZDD01 的数据:

 

 

这时候,我们把角色名字name 和 status 改下 ,code 不变,继续调用这个方法,看看效果:
 

可以看到 触发了更新, code ZDD01数据存在,所以执行了后面的name 、status 更新:

 

 

 好了该篇就到这。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/693894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不能真“生成代码”的“低代码”平台,不可能获得程序员的认可

目录 前言 思考 解决问题 基本现状 发现亮点 前言 >前几天我和一个好友聊天的时候&#xff0c;他是这么评价低代码平台的&#xff1a;“想证明程序员都是傻X&#xff0c;又想让程序员买单&#xff01;程序员本身心里就不爽... ” 那么&#xff0c;低代码发展势头迅猛的…

Live800:客服系统如何帮助企业优化服务流程

随着互联网的发展和社会进步&#xff0c;客服服务已经成为企业经营中不可或缺的一部分&#xff0c;然而&#xff0c;客服服务一直以来都备受诟病&#xff0c;用户对客服人员的不满情绪也随之而来。显然企业急需提升客户服务质量&#xff0c;这就离不开客服系统的帮助。 那么&am…

Linux系统中的信号

信号是由用户、系统或者进程发送给目标进程的信息&#xff0c;以通知目标进程某个状态的改变或系统异常。Linux信号可由如下条件产生&#xff1a; 对于前台进程&#xff0c;用户可以通过输入特殊的终端字符来给它发送信号。比如输入CtrlC通常会给进程发送一个中断信号&#xf…

人类语言和机器语言

人类语言和机器语言是两种不同的语言形式&#xff0c;二者之间有很多异同点。人类语言是人们日常交流所使用的语言&#xff0c;也是一种自然语言&#xff0c;人类语言是非常复杂和多样化的&#xff0c;包括文字、口语、手语等等&#xff0c;而机器语言则是非常简单和规范化的一…

Maven项目,本地jar包导入手动导入到Maven库中

当你的项目&#xff0c;由于网络或者环境这些问题&#xff0c;无法从maven中央仓库更新jar包到本地的时候&#xff0c;可以尝试下面方法&#xff0c;手动添加jar包到Maven仓库&#xff1b; 方法一&#xff08;推荐&#xff09;&#xff1a; 1、需要先拿到你的jar包&#xff0…

Linux——3Linux用户和权限

目录 3.1 认识root用户 root用户&#xff08;超级管理员&#xff09; su 和 exit命令 sudo命令 3.2 用户、用户组 3.3 修改权限控制 - chmod 3.4 修改权限控制 - chown 3.1 认识root用户 root用户&#xff08;超级管理员&#xff09; 无论是Windows、MacOS、Linux均采…

8.10 TCP是如何实现可靠传输的

目录 TCP 最主要的特点 面向流的概念 Socket 有多种不同的意思 TCP是如何实现可靠传输的&#xff1f; A 如何知道 B 是否正确收到了 M1 呢&#xff1f; 确认丢失 确认迟到 连续 ARQ 协议 累计确认 TCP报文段的首部格式 TCP 最主要的特点 TCP 是面向连接的运输层协议&a…

基于Java理发店会员管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

深入探析CAN收发器NCV7342D10R2G各项参数

NCV7342D10R2G安森美深力科 CAN收发器是控制器局域网&#xff08;CAN&#xff09;协议控制器和物理总线之间的接口&#xff0c;可用于12V和24V系统。收发器向总线提供差分传输能力&#xff0c;向CAN控制器提供差分接收能力。由于接收器输入的共模电压范围很宽能够达到卓越的电磁…

charles unknown 问题和手机代理设置(iOS手机)

一、Charles下载 下载地址&#xff1a;https://www.charlesproxy.com/download/ 二、Charles配置代理 1.查看本机IP&#xff1a;help-->Local IP Address 2.查看或者设置访问端口&#xff1a;Proxy->Proxy Settings 3.设置不代理计算机的请求&#xff08;推荐&#xff0…

【Java】Java核心 76:XML解析 Dom4j (下)

文章目录 **3** **使用xpath技术结合DOM4J技术读取xml文件(了解)**1.概念介绍2.XPath使用步骤3.XPath语法(了解)3.1全文搜索路径表达式方式 掌握 3 使用xpath技术结合DOM4J技术读取xml文件(了解) 1.概念介绍 问题&#xff1a;通过上面的案例我们发现有个小问题.就是获取标签的…

Python程序设计期末作品完整版|代码和程序设计文档

python程序设计作品&#xff0c;希望对您有帮助&#xff0c;希望您的一键三连&#xff01; 程序设计报告 1.爬取数据的意义 富豪榜的出现&#xff0c;体现了人们思想的变化:由保守藏富向正向面对财富的转变;由保守向文明开放(–说明了大众媒体的进步与教育的普及等思想工具的极…

会网络爬虫能干什么?

网络爬虫是一种自动化程序&#xff0c;用于浏览互联网并从网页中获取数据。它可以执行以下任务&#xff1a; 数据采集&#xff1a;网络爬虫可以访问网站&#xff0c;并从中提取所需的数据&#xff0c;例如新闻文章、产品信息、用户评论等。这些数据可以用于各种目的&#xff0…

【数据结构导论】第 2 章:线性表

目录 一、线性表的基本概念 &#xff08;1&#xff09;线性表的基本概念 &#xff08;2&#xff09;线性表的逻辑结构特征 &#xff08;3&#xff09;线性表的基本运算 二、线性表的顺序存储 &#xff08;1&#xff09;线性表顺序存储的类型定义 &#xff08;2&…

PHP 旅游网站系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 旅游网站系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为PHP APACHE&#xff0c;数据库为 mysql5.0&#xff0c;使用php语言开发。 代码…

Spark15-16

15. SparkOnYarn 15.1 Hadoop YARN回顾 15.1.1 YARN 的基本设计思想 将Hadoop 1.0中JobTracker拆分成两个独立的服务,一个全局的资源管理器ResourceManager(RM)和每个应用独有的ApplicationMaster(AM).其中RM负责整个系统的资源管理和分配,而AM负责单个的应用程序的管理 15.…

【面试题22】PHP通过Redis和MySQL实现商品秒杀功能

文章目录 一、前言二、系统架构三、技术栈四、系统设计4.1 商品设计4.2 用户设计4.3 抢单设计4.5 并发控制4.5 获取用户购买记录代码4.7 扣减商品库存代码4.8 获取商品锁代码4.9 添加订单记录代码 总结 一、前言 本文已收录于PHP全栈系列专栏&#xff1a;PHP面试专区。 计划将全…

element ui - el-table 设置表头背景颜色和字体颜色

element ui - el-table 设置表头背景颜色和字体颜色 场景代码效果 场景 在使用 elementui 中的 el-table 时&#xff0c;由于默认表格样式与设计稿不符&#xff0c;需要将表头的背景色和字体颜色设置为新颜色。 但是对 thead&#xff0c;thead tr&#xff0c;.el-table__cell…

go mod tidy 提示错误 go mod tidy -go=1.16 go mod tidy -go=1.17

错误概览 执行 go mod tidy 时&#xff0c;提示如下错误 > go mod tidy github.com/myrepo/myproj importsgo.k6.io/k6 importsgo.k6.io/k6/cmd importsgithub.com/fatih/color loaded from github.com/fatih/colorv1.12.0,but go 1.16 would select v1.13.0To upgrade to t…

通付盾发布WAAP白皮书,帮助企业应对数字化转型过程中日益高发的网络安全威胁

简介 企业数字化转型是数字经济发展的重要一环。面对企业数字化转型过程中的安全问题&#xff0c;WAAP白皮书将对攻击方式、攻击量、攻击来源、行业分布等维度对各类攻击进行详细解读&#xff0c;梳理传统Web应用防护能力的不足&#xff0c;分析日益增长的API防护&#xff0c;…