一、問題描述

上述表達,當傳入參數validCoupon的值為“1”時,仍然不能執行if判斷下的sql語句。
二、剖析原因
public class ExpressionEvaluator {
public boolean evaluateBoolean(String expression, Object parameterObject) {
Object value = OgnlCache.getValue(expression, parameterObject);
if (value instanceof Boolean) return (Boolean) value;
if (value instanceof Number) return !new BigDecimal(String.valueOf(value)).equals(BigDecimal.ZERO);
return value != null;
}
上述代碼是mybatis遞歸if條件,拼接sql的源碼,使用了OGNL表達式,而傳入的‘1’會被解析成字符類型,在java中,Char和String方然是不一樣的,返回false。
三、問題解決
第一種就是將Char類型轉化成String類型,<if test="validCoupon == '1'.toString() ">
第二種就是直接傳入時就是String類型,<if test=' validCoupon == "1" '>
