mybatis 数字类型值为0时做非空字符判断为false

之前就遇到过这个坑,今天查了下资料比以前搞明白了点,问题如下:
mybatis中if条件判断,其中numberType是数字类型(int,long,double,float,Integer…)等其中一种(目前我只试过long和Integer,但是看官网手册说明应该都在此问题范围内),如果对其进行了非空字符判断,且这个时候数字类型的值为0,那么下面第一个if是不会进入执行的。


<where>
            PKID !=-1
            <if test="numberType!= null and numberType!=''">
                AND NUMBER_TYPE = #{numberType}
            </if>

            <if test=" businessEndTime != '' and businessEndTime != null">
            <![CDATA[AND BUSINESS_TIME <= TO_DATE(#{businessEndTime},'yyyy-mm-dd hh24:MI:SS')]]>
            </if>

        </where>

小结:
1. 数字类型的进行非空字符判断本身就不合理,产生这种不合理情景也可以理解
2. 如果非要理解(总有人不搞明白不死心的),那就点开右边这个链接:https://commons.apache.org/proper/commons-ognl/language-guide.html,apache官网中搜索“zero”,你会看到下面这句话:
If the object is a Number, its double-precision floating-point value is compared with zero; non-zero is treated as true, zero as false;

0是被作为false的,所以也不会进条件,而且涉及到业务类型的判断的不要放在sql中,在java中判断,否则不好维护。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值