MyBatis拼接更新sql条件验证Integer应该注意的点

在使用MyBatis的XML配置文件中,遇到一个Integer类型的字段只能从1修改为0,不能从0修改为1的问题。经过调试和研究发现,MyBatis默认将Integer类型值为0视为空字符串,导致SQL拼接时出现错误。通过删除多余的空字符判断,成功解决了这个问题。博客详细记录了解决过程和原因分析。
摘要由CSDN通过智能技术生成

MyBatis采用xml的形式写sql语句时验证Integer类型的数据如果需要用到0值不要加空字符判断

今天在调试程序的时候,发现有一个整型字段,是个枚举。仅有0和1两个值,但是在调用sql修改这个字段时,发现该字段从0到1可以修改,但是从1到0就不行。于是进行了一系列的debug并没有发现问题,所有的参数在调用sql之前均传入生效了。
sql语句如下
在这里插入图片描述
于是按照网上的教程,在执行该条修改sql的时候,我去MappedStatement这个类中的getBoundSql方法中打了断点,查看具体执行的sql语句。
在这里插入图片描述
结果发现,拼接出来的sql少了一行
在这里插入图片描述
但是我的传参确实正常的
在这里插入图片描述
经高人指教,让我删掉assetAttribute这个属性的后半句判断(虽然他不了解为啥,只是凭感觉)。删掉后sql如下(中间做了小调整)。
在这里插入图片描述
后面再此调用这个sql,再MappedStatement类中查看sql拼接情况,此时就对了
在这里插入图片描述
事后针对这个问题在网上查阅资料发现,造成这个的原因是因为:MyBatis因自身原因默认了 Integer类型数据值等于0时 为 “”(空字符串)
所以当我传入的值为0的时候,在判断空字符串就满足了if的条件因此没有进行拼接。

问题说明的原文链接:https://blog.csdn.net/qq_38080370/article/details/103362675

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值