SupManCantFly 2020-06-17 12:02 采纳率: 33.3%
浏览 262

请问如何在主键冲突时解决冲突,并且还不返回主键值(保持原来主键值)?

想要实现的功能:如果tagId在数据库中已经存在,则更新;如果tagId在数据库中不存在,则插入,并且返回主键值;

问题描述:大部分功能都实现了,就是主键冲突的时候,也会返回一个主键值为0的数据;比如我的tagId=22,和数据库中的tagId=22冲突了,进行了更新操作,但是返回的主键值是0,当我再次读取tagid的值的时候就是0了;

实体类

public class Tag {
  private String tagText;
  private int tagId;
  private List<Blog> blogs;
}

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.psj.mapper.BlogMapper">
    <!--插入标签组,并且返回主键-->
    <insert id="insertTags" parameterType="List" useGeneratedKeys="true"
            keyProperty="tagId" keyColumn="tagId" >
        insert  into tag(tagText,tagId)
        values
        <foreach collection="collection" item="tag" index="index" separator=",">
        (#{tag.tagText},#{tag.tagId})
        </foreach>
        ON DUPLICATE KEY UPDATE tagText=VALUEs(tagText)/*注意是values*/
    </insert>
</mapper>

数据库表结构

图片说明

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-06-17 12:55
    关注

    insert 返回的是受影响的行数,不是id
    具体做法参考 https://www.cnblogs.com/nuccch/p/9067305.html

    评论

报告相同问题?