关于XML中<if test =“type!=null and type!=‘‘“></if>传入0导致 值为false的问题
问题描述:
在开发中编写了下面的代码当传入的serviceType=0时却无法进入下面的判断,拼接where 查询条件
前端传递参数serviceType=0;
<if test="serviceType != null and serviceType != ''" >
and (vsm.service_type = #{serviceType}
</if>
原因:
mybatis是用OGNL表达式来解析的,在OGNL的表达式中,’1’会被解析成字符,但是java是强类型的,char 和 一个string 会导致不等,所以if标签中的sql不会被解析。
另外0是会直接被转成null的,所以无法进入下面的判断
解决办法:
办法1:因为传参是int类型,可以直接去掉if判断的条件
<if test="serviceType != null>
and (vsm.service_type = #{serviceType}
</if>
办法2:因为前端传参是弱类型语言,可以直接接收前端传参实体中serviceType数据类型改为String类型
@ApiModelProperty(value = "服务类型")
private String serviceType;
此外:
OGNL对于boolean的定义和JavaScript有点像,即'' == 0 == false
在xml文件下在:当传入 的参数为Number类型或者浮点型,值为0时也是无法进入and语句当中.
值为0时将被解析为false,否则为true,浮点型0.00也是如此。
<if test="map.progressOfApplicant!=null and map.progressOfApplicant!=''">
ADN id=#{id}
</if>
参考链接:https://blog.youkuaiyun.com/qq_43538925/article/details/119795154