mybatis报错NumberFormatException

报错:


### Error querying database.  Cause: java.lang.NumberFormatException: For input string: "{0=null}"
### Cause: java.lang.NumberFormatException: For input string: "{0=null}"
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:107)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:98)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:62)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:354)
    ... 42 more
Caused by: java.lang.NumberFormatException: For input string: "{0=null}"
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at java.lang.Double.parseDouble(Unknown Source)
    at org.apache.ibatis.ognl.OgnlOps.doubleValue(OgnlOps.java:259)
    at org.apache.ibatis.ognl.OgnlOps.compareWithConversion(OgnlOps.java:143)
    at org.apache.ibatis.ognl.OgnlOps.isEqual(OgnlOps.java:186)
    at org.apache.ibatis.ognl.OgnlOps.equal(OgnlOps.java:578)
    at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:51)
    at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
    at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:210)
    at org.apache.ibatis.ognl.ASTAnd.getValueBody(ASTAnd.java:56)
    at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
    at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:210)
    at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:333)
    at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:413)
    at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:395)
    at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:45)
    at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:29)
    at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:30)
    at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:29)
    at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:47)
    at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:29)
    at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:37)
    at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:265)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:79)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104)

解决方法:

 <sql id="queryExpressCondition">
        <where>
            <if test="#{expressCode}!=null">
                and express_code=#{expressCode}
            </if>
            <if test="#{expressCountry}!=null">
                and express_country =#{expressCountry}
            </if>
            <if test="0!=#{expressStatus}">
                and express_status=#{expressStatus}
            </if>
            <if test="0!=#{expressType}">
                and express_type=#{expressType}
            </if>
        </where>
    </sql>

代码中 expressStatus 和expressType是int类型,mybatis框架中#号为了防止sql注入,对所有的数据都加上了双引号,所以在int类型是 直接不用写#{} 或者改为 ${} 包裹即可.

如下:

 <sql id="queryExpressCondition">
        <where>
            <if test="#{expressCode}!=null">
                and express_code=#{expressCode}
            </if>
            <if test="#{expressCountry}!=null">
                and express_country =#{expressCountry}
            </if>
            <if test="0!=expressStatus">
                and express_status=#{expressStatus}
            </if>
            <if test="0!=expressType">
                and express_type=#{expressType}
            </if>
        </where>
    </sql>

推荐阅读更多精彩内容

  • MyBatis 理论篇 [TOC] 什么是MyBatis  MyBatis是支持普通SQL查询,存储过程和高级映射...
    有_味阅读 2,066评论 0 26
  • 1.1mybatis下载 mybaits 的代码由github.com 管理,地址:https://github....
    暖熊熊阅读 453评论 0 5
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 3,601评论 1 14
  • 来印尼工作之前,就有人提醒我,在印尼工作一定要和当地人很好的相处。因为你和一个当地人成为了朋友,就相当于和...
    可风1阅读 1,231评论 1 1