zoukankan      html  css  js  c++  java
  • mybaits 在if-test判断数字、数字型字符串等注意事项

    mybatis 判断 if 标签里的test值可见mybatis源码  

      IfSqlNode -> apply() 方法

    追踪源码可知,最终是通过OGNL类判断的,所以我们可以看 

    OgnlOps.equal( v1, v2 )

    个人总结如下
    OGNL的比较逻辑,是以转为数字为核心,它会尝试将 value转为数字
    具体规则如下
      如果为Integer,Double等直接是数字,
      如果俩者都是数字型,则比较值的大小 例如 1==1.00 是true
      如果都不是数值型,并且 不是都继承了 Comparable,则通过 equals比较
      如果都不是数值型,并且继承了Comparable,或者为枚举型,则通过compareTo 比较
      否则,一个数值型,一个不是,则会尝试将非数值型转为数值,
        如果是 boolean型,true为1,false为0
        如果是单引号,'12' 里面的长度为0,则返回值为0;长度为1,则为char,长度大于1 则为 string
          如果是 char,它会通过 asii 码转为 double(ps '1' asii码为49,' ' 空格 asii码为32)
          如果是string,这尝试转为数值,无法转换,则false,否则,进行数值比较
        如果是双引号,则视为字符串 "1",则会被转为数值 1,
        char型,也可以通过 '1'.toString() 来转为字符串
  • 相关阅读:
    Promise前期准备---区别实例对象与函数对象
    es6之函数参数默认值、字符串方法、for of
    es6之剩余和扩展参数
    es6之解构赋值
    es6之set和map
    前端知识点总结
    jQuery的12种选择器
    前端面试总结
    Closure
    PHP 中 16 个魔术方法详解
  • 原文地址:https://www.cnblogs.com/jaxlove-it/p/7605506.html
Copyright © 2011-2022 走看看