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

这篇具有很好参考价值的文章主要介绍了Springboot Mybatis 不存在插入数据,存在则更新数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

今天该篇介绍的 是使用 

   INSERT INTO
   
   ON DUPLICATE KEY UPDATE

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

正文

ON DUPLICATE key update

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

优先级主键>唯一索引

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

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

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

mybatis plus存在更新不存在新增,跟我一起玩转 SpringBoot,Mybatis,mybatis,spring boot,mysql,插入,更新,DUPLICATE KEY

 

简单贴下代码 :

实体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>

简单介绍下:

mybatis plus存在更新不存在新增,跟我一起玩转 SpringBoot,Mybatis,mybatis,spring boot,mysql,插入,更新,DUPLICATE KEY

 

实践看看效果 :

当前数据

mybatis plus存在更新不存在新增,跟我一起玩转 SpringBoot,Mybatis,mybatis,spring boot,mysql,插入,更新,DUPLICATE KEY

 

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

mybatis plus存在更新不存在新增,跟我一起玩转 SpringBoot,Mybatis,mybatis,spring boot,mysql,插入,更新,DUPLICATE KEY

 

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

mybatis plus存在更新不存在新增,跟我一起玩转 SpringBoot,Mybatis,mybatis,spring boot,mysql,插入,更新,DUPLICATE KEY 

 

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

mybatis plus存在更新不存在新增,跟我一起玩转 SpringBoot,Mybatis,mybatis,spring boot,mysql,插入,更新,DUPLICATE KEY

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

 mybatis plus存在更新不存在新增,跟我一起玩转 SpringBoot,Mybatis,mybatis,spring boot,mysql,插入,更新,DUPLICATE KEY

 

 好了该篇就到这。文章来源地址https://www.toymoban.com/news/detail-642915.html

到了这里,关于Springboot Mybatis 不存在插入数据,存在则更新数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot+MyBatis批量插入数据的三种方式

    最近导入表格数据时需要同时插入修改大量数据,研究了一下有三种实现方式 1、用for循环调用sql插入数据 这种方式插入大量数据时,效率非常底下,不推荐 2、利用mybatis的foreach来实现循环插入 这种方式插入大量数据时,好处是不用频繁访问数据库,一条sql搞定,效率比较

    2024年02月16日
    浏览(29)
  • mybatis-plus 批量插入示例

    正常我们使用mybatis-plus插入的时候,首先想到的是  saveBatch 方法,不过看了下打印出来的sql和底层代码,才发现它并不是真正的批量插入。     实现层   ServiceImpl 中的代码为 通过监控控制台发现,它只是循环每1000条去插入,效率非常低。   参考网友的文章,找到一个支

    2024年02月15日
    浏览(29)
  • Mybatis-plus---的批量插入

    批量插入 一、继承IService(伪批量) 二、insertBatchSomeColumn Mybatis-plus很强,为我们诞生了极简CURD操作,但对于数据批量操作,显然默认提供的insert方法是不够看的了,于是它和它来了!!! Mybatis-plus提供的两种插入方式          继承IService(伪批量)         insertBatchSo

    2024年02月16日
    浏览(37)
  • 【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案

    项目技术栈:jdk (1.8) + spring boot (2.1.0) + mybatis-plus (3.5.1) 数据库: MySQL 字段类型:varchar 和 Integer 从前端传过来的数据实体字段, convertType 和 step 设为null时,使用mybatis-plus 的 updateById方法往数据库中更新时,这两个字段不更新,数据不为空可以插入。 mybatis-plus在更新的时候做

    2024年01月16日
    浏览(51)
  • springboot mybatis-plus数据库超时配置

    超时异常 写XML 写法,单位秒 Mapper类写法,单位秒 超时异常 整个事务的超时时间,单位是秒。 它的原理大致是事务启动时,事务上下文会计算一个到期时间deadLine(当前时间+超时时间),当mybatis - prepareStatement时,会调用 SpringManagedTransaction 的getTimeOut,该方法会计算事务剩

    2024年02月03日
    浏览(41)
  • springBoot-Mybatis-Plus 多数据源切换实现

    前言:本文主要通过AbstractRoutingDataSource,实现根据 http 访问携带的标识动态切换数据源; 1 AbstractRoutingDataSource 介绍: AbstractRoutingDataSource 是 Spring 框架中的一个抽象类,它可以用来实现动态数据源切换。在多数据源场景下,AbstractRoutingDataSource 可以根据不同的请求来动态地选

    2024年02月03日
    浏览(38)
  • Springboot 配置动态多数据源(Mybatis-plus)

    前言:在项目中需要用到动态切换多数据源,查阅Mybatis-plus文档得知可以通过@DS注解,但该方法主要针对不同内容的数据源,而目前场景是相同内容的数据库需要在运行时根据请求头动态切换,因此文档方法不适用。 注意,不要使用dynamic-datasource-spring-boot-starter依赖包。 应用

    2024年02月12日
    浏览(29)
  • grpc + springboot + mybatis-plus 动态配置数据源

    前言 这是我在这个网站整理的笔记,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 1.1 项目初始化 项目初始化的时候会调用com.baomidou.dynamic.datasource.DynamicRoutingDataSource对象的addDataSource方法添加数据源,数据源存进dataSourceMap中。 1.2 接口请求时候 进行数据操作时,

    2024年02月09日
    浏览(31)
  • MyBatis-plus的批量插入方式对比分析

      【摘要】Mybatis批量插入一直是开发者重点关注的问题,本文列举了Mybatis的五种插入方式进行对比分析,验证了五种批量插入的方式的优先级。   略。 1、编写UserService服务类,测试一万条数据的耗时情况: 2、编写UserMapper接口 3、编写UserMapper.xml文件 4、进行单元测试

    2024年02月07日
    浏览(41)
  • SpringBoot整合Mybatis-Plus、Druid配置多数据源

    目录 1.初始化项目 1.1.初始化工程 1.2.添加依赖 1.3.配置yml文件 1.4.Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹 1.5.配置使用数据源 1.5.1.注解方式 1.5.2.基于AOP手动实现多数据源原生的方式 2.结果展示 Mybatis-Plus:简介 | MyBatis-Plus (baomidou.com) 在正式开始之前,先初始

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包