昨天犯了一个错,其实是前几天写的代码犯的错,今天发现的。这是原来的代码:
<update id="updateInfoByFoodId">
update food set
<if test="info != null">
info=#{info, jdbcType=VARCHAR}
</if>
<where>
<if test="foodId != null">
food_id=#{foodId, jdbcType=BIGINT}
</if>
</where>
</update>
这段代码就是滥用if判断的典型了。如果foodId为空,那么food表info这一列的所有数据都会变成同一个值。这是代码逻辑上的错,这对数据库数据造成的破坏是毁灭性的。
有的时候,SQL不能执行其实是需要的,它是对数据的保护。所以去掉foodId的null判断:
<update id="updateInfoByFoodId">
update food set
<if test="info != null">
info=#{info, jdbcType=VARCHAR}
</if>
where food_id=#{foodId, jdbcType=BIGINT}
</update>