根本原因:int默认值是0,Integer的默认值是null
问题描述:
在Person对象的age字段是int类型,int如果不设置的话,会默认自动转为0,这样使用age= 0的Person去Mybatis中update的时候,就会把age误更新为0;
Person.java
@Table(name = "person")
public class Person {
private String name;
private int age; // int的特殊性,不设置会转为0
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
PersonMapper.xml
<update id="updateSelective" parameterType="test.model.person" >
update person
<set >
<if test="name != null" >
name = #{name,jdbcType=VARCHAR},
</if>
<if test="age != null" > // model对象中的int age不设置会自动转为0
age= #{age,jdbcType=INTEGER}, // 不期望的情况出现:这个地方就会被更新为0
</if>
</set>
where id = #{id,jdbcType=VARCHAR}
</update>
解决办法:
1. model对象中,int类型更改为Integer,因为Integer不设置默认会转为null
2. model对象中,int类型更改为String,因为String不设置默认会转为null