bug篇——Mybatis中Mapper.xml文件的if判斷問題

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" '>

相關文章
相關標籤/搜索