MyBatis 中的空字符串和 0

先来看下问题,mybatis中,进行了判断,如果type为0,那么返回3条。

但实际上确返回了7条(数据库中一共只有七条数据),显然,第一个 if 标签没有生效,或者test 里面的值为false。

 如下图, 入参为type=0, 返回了 7条数据

求助开源社区后,发现是  type!= ''  结果为false,也就是说这里的 0!=''  是false

原因是空字符串会转换成0

为了真正搞明白怎么回事,直接看源码。

Mybatis中各个包的作用

参照大佬的总结,运行到xmltags包时,一步步进行探究

 接着运行,看到对 0 和 '' 进行比较了,进到OgnlOps.equal方法里面,看看到底是怎么进行比较的。

一步步进来之后发现,发现这里是对参数进行了double转换,

0变成了0.0  而 '' 字符串也直接变成了0.0,  所以 0 跟 '' 相等!!所以  type !=''  结果是false!  这就是为什么test标签失效的原因。

为什么是转换成0 而不是其他数字呢

进到doublevalue里面继续探究一下。

如果传进来的是参数是字符串,并且长度是0,那么就会转换成 double类型的 0

解决这个问题,可以将入参参数type设置成字符串"0"

Mysql中的0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值