今天犯了个错
建实体的时候用的是基本类型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。