MENU

解决Mybatis插入记录使用on duplicate key update不返回主键的问题

概述

Mybatis使用insert记录时,如果使用ON DUPLICATE KEY UPDATE无法获得记录的主键。

问题代码示例

<insert id="insertOrUpdate" parameterType="Example" useGeneratedKeys="true" keyProperty="id">
    <include refid="insertSql"/>
    ON DUPLICATE KEY UPDATE
    count = #{count}
</insert>

insert时已经使用了useGeneratedKeyskeyProperty参数,但因为使用ON DUPLICATE KEY UPDATE语句,insert后的影响行数为0,此时Mybatis不会将主键赋值给传入的对象,故插入记录后通过getId()方法获取到的主键为null

解决方法

想要获得主键,则必须产生影响行。
解决方法是在表中添加一个更新时间字段update_time,进行insert时更新该字段,让其产生影响行,即可返回id。

<insert id="insertOrUpdate" parameterType="Example" useGeneratedKeys="true" keyProperty="id">
    <include refid="insertSql"/>
    ON DUPLICATE KEY UPDATE
    update_time = NOW(),
    count = #{count}
</insert>

注意:一定要用NOW()函数而不是ON UPDATE CURRENT_TIMESTAMP,否则依旧不会产生影响行


文章标题:解决Mybatis插入记录使用on duplicate key update不返回主键的问题
如果文中内容侵犯了您的权益,请及时与博主取得联系进行删除!
本站文章未经许可禁止转载,本文地址:https://blog.wanvale.com/archives/345/

Archives QR Code Tip
QR Code for this page
Tipping QR Code