今天犯了个错
建实体的时候用的是基本类型int、double、long…而不是包装类Integer、Double、Long…
导致更新后实体model中使用基本类型的数据在数据库被清零
public class test {
public Long testa ;
public long ad;
public Long getTesta() {
return testa;
}
public void setTesta(Long testa) {
this.testa= testa;
}
public Long getAd() {
return ad;
}
public void setAd(Long ad) {
this.ad = ad;
}
}
数据库mybatis自动生成的updateByPrimaryKeySelective方法如下:
<update id="updateByPrimaryKeySelective" parameterType="model.test">
update test
<set>
.....
<if test="testa!= null">
testa= #{testa,jdbcType=BIGINT},
</if>
<if test="ad != null">
ad = #{ad,jdbcType=BIGINT},
</if>
</set>
</update>
更新的时候
Test test = new Test()
test.setId(id);
test.setTesta(232);
updateByPrimaryKeySelective(test);
如代码只想更新testa,却意外的把ad也更新为0了。
所以在建实体model时要用包装类才能使用如mybatis操作数据块的代码一样去更新数据。否则基本类型的数据会被清零。因为在new关键字构建方法构建对象后,该对象基本类型的数据默认值是0,而不是null;而包装类默认值是null。