Mybatis 使用ON DUPLICATE KEY UPDATE操作数据

本文详细介绍了在Mybatis中如何使用ON DUPLICATE KEY UPDATE特性来实现在遇到主键冲突时自动进行更新,避免了重复的插入操作。通过具体的SQL语句示例,展示了如何在插入数据的同时检查主键是否存在,如果存在则更新指定字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis 使用ON DUPLICATE KEY UPDATE操作数据

Mybatis
对数据进行插入和更新时,Mybatis提供了ON DUPLICATE KEY UPDATE,可实现一条sql语句同时完成插入或更新操作。判断主键,根据主键进行更新或插入操作
具体用法:

<insert id="save" parameterType="EduVideo">
        insert into edu_video
        (id,
         course_id,
         chapter_id,
         title,
         sort,
         gmt_create,
         gmt_modified)
        values
        (#{eduVideo.id},
         #{eduVideo.courseId},
         #{eduVideo.chapterId},
         #{eduVideo.title},
         #{eduVideo.sort},
         now(),
         now()
         )
        ON DUPLICATE KEY UPDATE
         title = values(title),
         sort = values(sort),
         gmt_modified = values(gmt_modified)
    </insert>

ON DUPLICATE KEY UPDATE后可自定义需要更新的字段。
当mapper接口中的方法需要获取返回值时,返回值会有所不同。
若是插入一条数据,返回值为1;若是更新一条数据,返回值为2
若是更新操作,可以看到返回的值a为2
若是插入操作,可以看到返回的值a为1

MyBatis中,`ON DUPLICATE KEY UPDATE` 是一种数据操作语句,用于在尝试插入一个新记录时,如果因为主键或唯一索引冲突而失败,则会执行一个更新操作。这种SQL语句特别适用于当你希望在记录已存在时更新该记录,而不存在时则插入新记录的场景。 在MyBatis中,你可以通过XML映射文件或注解的方式来使用`ON DUPLICATE KEY UPDATE`。以下是使用XML映射文件的一个示例: ```xml <insert id="insertOrUpdate" useGeneratedKeys="true" keyProperty="id"> INSERT INTO your_table (column1, column2, ...) VALUES (#{param1}, #{param2}, ...) ON DUPLICATE KEY UPDATE column1 = VALUES(column1), column2 = VALUES(column2) </insert> ``` 在这个例子中,`your_table`是你要插入或更新的表名,`column1`, `column2`等是你希望插入或更新的列名,`param1`, `param2`等是传递给映射方法的参数。当尝试插入一条记录时,如果`your_table`表中已存在具有相同主键或唯一索引值的记录,则会执行`ON DUPLICATE KEY UPDATE`后面的更新语句。 同样的逻辑也可以通过注解来实现,例如: ```java @Options(useGeneratedKeys = true, keyProperty = "id") @Insert("INSERT INTO your_table (column1, column2, ...) VALUES (#{param1}, #{param2}, ...)") @Update("UPDATE your_table SET column1 = #{param1}, column2 = #{param2}, ... WHERE id = #{id}") @SelectKey(statement="SELECT LAST_INSERT_ID()", keyProperty="id", before=false, resultType=int.class) public void insertOrUpdate(YourEntity entity); ``` 在这种方式下,当尝试插入数据时,如果出现重复键错误,MyBatis会自动根据`@Update`注解中定义的SQL语句来更新记录。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值