int,long,double数值类的基本类型导致更新数据被清零

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值