Mybatis 之整数类型的if判断

在工作中一直使用mybatis 来做 orm框架,但是第一次遇到了一个比较奇葩的问题。
问题场景复现 插入一个帖子,其中有个字段是否匿名 is_anonymous 在oracle表中 是 is_anonymous number default -1。然后 我就根据前台是否传Integer类型的 isAonymous 字段来确定sql中是否需要传is_anonymous字段

insert into msg_t(
id,
<if test="isAnonymous!=null and isAnonymous!=''">
  is_anonymous
</if>
)values(
1,
<if test="isAnonymous!=null and isAnonymous!=''">
    #{isAnonymous,jdbcType=NUMBERIC}
</if>
)

当我前台传 的参数是:

{
  "isAnonymous":0
}

结果发现数据库里 新插入记录的 is_anonymous=-1, 按照前面的条件判断语句推理 is_anonymou=0 才是正确的。
开始怀疑if判断语句,但怎么看这个语句都是正确的,然后各种怀疑人生,无奈我又按照如下方法:

insert into msg_t(
id,
<if test="isAnonymous ==0">
  is_anonymous
</if>
)values(
<if test="isAnonymous ==0">
    #{isAnonymous,jdbcType=NUMBERIC}
</if>
)

结果发现 数据库中记录的is_anonymou=0 ,然后我就大胆推测这应该是mybatis的一个bug吧,然后上百度发现这是一个未解之谜。但是网上有博客是这样写的:

insert into msg_t(
id,
<if test="isAnonymous!=null and isAnonymous!='' or isAnonymous==0">
  is_anonymous
</if>
)values(
1,
<if test="isAnonymous!=null and isAnonymous !='' or isAnonymous==0">
    #{isAnonymous,jdbcType=NUMBERIC}
</if>
)

这个真的是一个坑,按照道理来说 Integer类型的 isAnonymous !=null这个判断为null写法是没有问题的,但是mybatis 就是不走这个if判断,这是为什么呢?元芳你怎么看。

猜你喜欢

转载自blog.csdn.net/u014297148/article/details/80012184