在postgresql9.5之后,我们就可以使用原生的upsert语句了,时至2018年9月7日,我们仍然可以使用下面这样的方法去进行插入更新操作。我这里以mybatis中的xml文件中的方式来说明如何编写upsert语句对应的代码: 假设我们有一个user表,表中有guid
和nick_name
,当主键存在时,我们更新nick_name,我们就可以像下面这样写:
insert into user
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="guid != null" >
guid,
</if>
<if test="nickName != null" >
nick_name,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="guid != null" >
#{guid,jdbcType=VARCHAR},
</if>
<if test="nickName != null" >
#{nickName,jdbcType=VARCHAR},
</if>
</trim>
ON CONFLICT (guid)
DO UPDATE
<set >
<if test="nickName != null" >
nick_name = #{nickName,jdbcType=VARCHAR},
</if>
</set>
</insert>