写后台SQL的一些心得
昨天犯了一个错,其实是前几天写的代码犯的错,今天发现的。这是原来的代码:
<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>