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