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


一、問題描述

  

 

   上述表達,當傳入參數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" '>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM