Mybatis 有则更新,无则插入的实现

本文介绍如何使用MyBatis实现Upsert操作,即当记录的主键或Unique键已存在时更新记录,否则新增记录。通过示例代码展示了在t_user表中使用ON DUPLICATE KEY UPDATE语句的具体实现。
部署运行你感兴趣的模型镜像

想插入数据库一条记录,如果这条记录的主键或者Unique键已存在,则更新这条记录,如果主键或Unique键不存在,则新增这条记录。用Mybatis实现。网上有些方法说用replace into,但是mybatis是不支持的。所以,必须使用ON DUPLICATE KEY UPDATE。

<insert id="insertUser"  useGeneratedKeys="true" keyProperty="id" keyColumn="id"
            parameterType="com.foreigners.entity.User">
        insert INTO
        t_user(openId, name, gender, phoneNumber)
        VALUES
        (#{openId},#{name},#{gender},#{phoneNumber})
        ON DUPLICATE KEY UPDATE
        name = #{name},
        gender = #{gender},
        phoneNumber = #{phoneNumber}
</insert>

这段代码里,openId是Unique键。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### MyBatis实现 Upsert 功能 在 MyBatis 或者 MyBatis Plus 中实现根据条件存在更新记录,存在插入新记录(Upsert)功能可以通过多种方式完成。对于 MySQL 数据库而言,推荐使用 `INSERT ... ON DUPLICATE KEY UPDATE` 语法来处理这种情况。 #### 使用 XML 映射文件配置 SQL 语句 通过编写自定义的 SQL 插入语句,在遇到唯一键冲突时执行更新操作: ```xml <insert id="upsertRecord" parameterType="map"> INSERT INTO table_name (column1, column2, ...) VALUES (#{value.column1}, #{value.column2}, ...) ON DUPLICATE KEY UPDATE column1=VALUES(column1), column2=VALUES(column2); </insert> ``` 上述代码片段展示了如何利用 `<insert>` 标签配合 `ON DUPLICATE KEY UPDATE` 来构建一个能够自动判断是否存在重复项并相应采取行动的操作[^2]。 #### 利用 MyBatis Plus 的内置支持 MyBatis Plus 提供了一些便捷的方法用于简化 CRUD 操作,但对于复杂的业务逻辑如 Upsert,则可能仍需手动指定 SQL 语句。过,可以借助其提供的接口和工具类更方便地组装查询参数。 例如,可以在实体类对应的 Mapper 接口中声明如下方法: ```java public interface UserMapper extends BaseMapper<User> { @Insert("<script>" + "INSERT INTO user (id,name,email)" + "VALUES (#{item.id},#{item.name},#{item.email})"+ "ON DUPLICATE KEY UPDATE name=#{item.name},email=#{item.email}" + "</script>") int insertOrUpdate(@Param("item")User item); } ``` 这段 Java 代码展示了一个名为 `insertOrUpdate` 的方法签名及其所关联的具体 SQL 实现细节[^1]。 #### 注意事项 - 当设计表结构时应确保设置了合适的唯一索引来触发 `ON DUPLICATE KEY UPDATE` 行为。 - 对于同的数据库产品,具体的 Upsert 语法可能会有所同;这里仅针对 MySQL 进行说明。 - 如果项目中已经集成了 MyBatis Plus 并希望保持一致性的话,尽可能采用框架本身提供的解决方案或扩展机制而非完全绕过它来自定义 SQL[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值