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

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

  • 如何让参数为0也能进入if标签的方法中?
    • 1、问题
    • 2、原因
    • 3、怎么解决这个问题?

如何让参数为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=''空字符串的时候不能进入该方法

你可能感兴趣的:(JAVA,mybatis,java,开发语言)