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