需要往一张表里面插入一条完整的数据,在插入之前需要判断该条数据是否存在,当然可以在插入前先根据id去查询是否存在。然后再决定是否插入。但是感觉这样要多操作一次数据库,所以想直接在mapper.xml文件里面实现该功能,
xml配置如下,首先需要在对象FieldsInfo里面定义一个count ;用来记录计算结果,mapper.xml如下:逻辑就是通过count的值来决定是执行update还是insert操作
<update id="update" parameterType="FieldsInfo" >
<selectKey keyProperty="count" resultType="int" order="BEFORE">
select count(*) from BXKC.BXKC_FIELDS_INFO where ID = #{id,jdbcType=VARCHAR}
</selectKey>
<if test="count > 0">
update BXKC.BXKC_FIELDS_INFO
<set >
<if test="fieldInfo != null">
FIELD_INFO = #{fieldInfo,jdbcType=VARCHAR},
</if>
<if test="fieldType != null">
FIELD_TYPE = #{fieldType,jdbcType=VARCHAR},
</if>
</set>
where ID = #{id,jdbcType=VARCHAR}
</if>
<if test="count==0">
insert into bxkc.BXKC_FIELDS_INFO
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
ID,
</if>
<if test="fieldName != null">
FIELD_NAME,
</if>
<if test="fieldInfo != null">
FIELD_INFO,
</if>
<if test="fieldType != null">
FIELD_TYPE,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=VARCHAR},
</if>
<if test="fieldName != null">
#{fieldName,jdbcType=VARCHAR},
</if>
<if test="fieldInfo != null">
#{fieldInfo,jdbcType=VARCHAR},
</if>
<if test="fieldType != null">
#{fieldType,jdbcType=VARCHAR},
</if>
</trim>
</if>
</update>