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

前言

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

今天该篇介绍的 是使用 

   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 更新:

 

 

 好了该篇就到这。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Spring Boot中使用MyBatis插入数据,你需要进行以下几个步骤: 1. 配置数据源:在application.properties文件中配置数据库连接信息,包括驱动类、URL、用户名和密码等。[1] 2. 添加Mapper扫描:在启动类上使用@MapperScan注解,指定Mapper接口所在的包路径,以便MyBatis能够自动扫描并生成对应的实现类。[2] 3. 编写Mapper接口:创建一个Mapper接口,定义插入数据的方法。例如,在UserService接口中添加一个add方法,用于插入用户数据。[3] 4. 实现插入逻辑:在UserService的实现类中,实现add方法,调用对应的Mapper方法来插入数据。 下面是一个简单的示例代码: ```java // UserService.java package com.hlx.springboot.service; import com.hlx.springboot.domain.User; public interface UserService { int add(User user); } // UserServiceImpl.java package com.hlx.springboot.service.impl; import com.hlx.springboot.domain.User; import com.hlx.springboot.mapper.UserMapper; import com.hlx.springboot.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public int add(User user) { return userMapper.add(user); } } // UserMapper.java package com.hlx.springboot.mapper; import com.hlx.springboot.domain.User; import org.apache.ibatis.annotations.Insert; public interface UserMapper { @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})") int add(User user); } ``` 在上述示例中,我们定义了一个User实体类,包含name和age属性。在UserMapper接口中,使用@Insert注解定义了插入数据的SQL语句。在UserServiceImpl中,通过@Autowired注解将UserMapper注入,并在add方法中调用UserMapper的add方法来实现插入逻辑。 这样,当你调用UserService的add方法时,就会将数据插入数据库中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小目标青年

对你有帮助的话,谢谢你的打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值