「问题」如何解决 MyBatis 中的 if 标签无法识别参数为 0 的问题

如何解决 MyBatis 中的 if 标签无法识别参数为 0 的问题

如何让参数为0也能进入if标签的方法中?

1、问题

mybatis中的自己写的判断方法,若参数buildingType=0,则不会进入到方法中

<if test="searchForm.buildingType != null and searchForm.buildingType !=''">
      and a.building_type=#{searchForm.buildingType}
</if>

2、原因

mybatis源码如下所示:

return s.length() == 0 ? 0.0D : Double.parseDouble(s);

代码解释:这是一个将字符串转换为 double 类型的操作。代码中使用了三元运算符 ?: 来判断字符串的长度是否为 0。如果字符串为空,则返回 0.0D(double 类型的零值),否则使用 Double.parseDouble() 方法将字符串转换为 double 类型。这段代码的作用是将一个字符串转换为 double 类型的数值,若buildingType=0,则结果为0.0

重点: Mybatis 在判断整数0.0的时候会把默认为 ’ ’ ,所以判断 !=’ '的条件为false 不会进去判断条件

3、怎么解决这个问题?

1. 错误方法的方法

<if test="searchForm.buildingType != null and searchForm.buildingType !=''">
     and a.building_type=#{searchForm.buildingType}
 </if>

buildingType=0不会进入该方法

2.不推荐的方法

<if test="searchForm.buildingType != null and searchForm.buildingType ==''">
     and a.building_type=#{searchForm.buildingType}
 </if>

虽然这样buildingType=0的时候可以进入方法,但是当buildingType=''的时候也可以进入这个方法,造成查询出的数据不正确,故不推荐这样写

3.正确方法

<if test="(searchForm.buildingType != null and searchForm.buildingType !='') or searchForm.buildingType==0.0">
      and b.building_type=#{searchForm.buildingType}
</if>

参数buildingType=0buildingType=1buildingType=2 ...,都能进入该方法,buildingType=''空字符串的时候不能进入该方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术路上的探险家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值