事故原因
实体类的field类型是int时, 尽管没有赋值, 但是mybatis查询得到的是0,
在update时, 没有判断为0时不要更新, 导致state更新为0
表DDL
CREATE TABLE `t_xxx` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`state` tinyint(4) NOT NULL DEFAULT '1' COMMENT '催收状态. 1: 状态A, 2: 状态B, 3: 状态C, 4: 状态D',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15189 DEFAULT CHARSET=utf8 COMMENT='xx表';
生产事故的Mybatis Xml
<update id="updateCollectionOverdue" parameterType="com.xxx.Pojo">
<foreach collection="list" separator=";" item="element">
UPDATE t_xxx SET
<if test="element.state != null>
state = #{element.state},
</if>
update_time = CURRENT_TIMESTAMP,
WHERE id = #{element.id}
</foreach>
</update>
实体类
public class Pojo {
private Long id;
private int state;
// getter and setter is omitting
}
修复后的Mybatis Xml
<update id="updateCollectionOverdue" parameterType="com.xxx.Pojo">
<foreach collection="list" separator=";" item="element">
UPDATE t_xxx SET
<if test="element.state != null and element.state != 0 " >
state = #{element.state},
</if>
WHERE id = #{element.id}
</foreach>
</update>