如何使用 ibatis 有条件地更新 table?

How to update table conditionally using ibatis?

我想使用 ibatis dbmapper.xml 在 Postgres 中更新 table。

条件是它应该只更新地图包含值的那些列。对于其他列,不应修改该值。

假设我有一家公司 Table 包含以下列 {company_id, name, headQrtr, ceo}

如果我想使用 company_id 更新公司 table 中的任何特定行,我将使用以下代码片段 (dbmapper.xml)

<update id="update_company_details" parameterType="map">
    update Company set (name,headQrtr,ceo) values(${name_value},${headQrtr_value},${ceo_value}) where company_id=${company_id_value}
</update>

如果我更新所有三列,这会很好用。

但在某些情况下,我只想更新 ceo 列,在这种情况下,我的输入映射将只有一个键(即 ceo_value),其余键不可用。 在这种情况下,其他列将更新为空值。那么我该如何限制呢?

我正在考虑使用 'if' 标签,但不确定如何使用它来设置不同列的值?

这对我有用...

<update id="update_company_details" parameterType="map">
        UPDATE Company
        <set>
            <if test="name_value!= null">
                name = #{name_value},
            </if>
            <if test="headQrtr_value!= null">
                headQrtr= #{headQrtr_value},
            </if>
            <if test="ceo_value!= null">
                ceo= #{ceo_value},
            </if>
        </set>
        WHERE company_id= #{company_id_value}
    </update>