昨天同事反馈mybatis保存不了int类型的属性,一直报错,错误信息如下:
Caused by: java.lang.NumberFormatException: For input string: "null" at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at sun.misc.FloatingDecimal.parseDouble(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:144) 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.builder.xml.dynamic.OgnlCache.getValue(OgnlCache.java:42) at org.apache.ibatis.builder.xml.dynamic.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32) at org.apache.ibatis.builder.xml.dynamic.IfSqlNode.apply(IfSqlNode.java:30) at org.apache.ibatis.builder.xml.dynamic.MixedSqlNode.apply(MixedSqlNode.java:29) at org.apache.ibatis.builder.xml.dynamic.TrimSqlNode.apply(TrimSqlNode.java:42) at org.apache.ibatis.builder.xml.dynamic.MixedSqlNode.apply(MixedSqlNode.java:29) at org.apache.ibatis.builder.xml.dynamic.MixedSqlNode.apply(MixedSqlNode.java:29) at org.apache.ibatis.builder.xml.dynamic.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:37) at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:241) at org.apache.ibatis.executor.statement.BaseStatementHandler.<init>(BaseStatementHandler.java:61) at org.apache.ibatis.executor.statement.PreparedStatementHandler.<init>(PreparedStatementHandler.java:36) at org.apache.ibatis.executor.statement.RoutingStatementHandler.<init>(RoutingStatementHandler.java:42) at org.apache.ibatis.session.Configuration.newStatementHandler(Configuration.java:348) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:43) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:108) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:75) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:145) ... 51 more
对应配置为:
<if test="downNum!=null and downNum!='null' and downNum!=''"> #{downNum} </if>
错误原因是使用了判断String的条件判断数字类型,正确方式是:
<if test="downNum>=0"> #{downNum} </if>