美文网首页
mybatis if标签字符串比较问题java.lang.Num

mybatis if标签字符串比较问题java.lang.Num

作者: 流星雨1990 | 来源:发表于2017-03-26 17:18 被阅读140次

    mybatis if 标签的一般用法:
    方法一:

      <if test="keyword != null and keyword !=''">
           and column_a like concat('%',#{keyword},'%')
      </if>
    

    或者这样,方法二:

      <if test="keyword != null and keyword !=''">
           and column_a like concat('%',#{keyword},'%')
      </if>
    

    也就是说,test条件可以用双引号括起来,里面的字符串用单引号,也可以test条件用单引号括起来,里面的字符串用双引号.两种写法都可以.
    但是当我要比较keyword是否等于"a"时,用方法一是写成如下:

       <if test="keyword =='a'">
           and column_a = 'a'
       </if>
    

    这时如果keyword的值是"a",运行的时候会报这样的异常:java.lang.NumberFormatException: For input string: "a".
    解决方法如下:
    用方法二的方式:

       <if test='keyword =="a"'>
           and column_a = 'a'
       </if>
    

    或者还是用方法一,但是'a'改成'a'.toString()

       <if test="keyword =='a'.toString()">
           and column_a = 'a'
       </if>
    

    原因是ognl语法问题, test条件内的长度为1的字符串'a'会被当成char类型,所以传入的keyword值会转成数字与其比较,如果keyword的值是"a",就会报错,但如果是如<if test="keyword =='ab'"><if test="keyword ==''">这样的写法就不会有这种问题,因为只有单个字符才会被当成char类型,'ab'和''还是当成字符串做比较的.

    相关文章

      网友评论

          本文标题:mybatis if标签字符串比较问题java.lang.Num

          本文链接:https://www.haomeiwen.com/subject/bsekottx.html