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

想要实现的功能:如果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>

数据库表结构

图片说明

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

开启事务,先查再执行,存在就update,不存在就insert