错误背景
在mapper中对请求的参数进行判断
<if test="cateId == 'A'"> and a.cateId like 'E%' and a.cateId not like 'E50%' </if> <if test="cateId == 'B'"> and a.cateId like 'S%' </if> <if test="cateId == 'C'"> and a.cateId like 'G%' </if> <if test="cateId == 'D'"> and a.cateId like 'E50%' </if>
报错信息
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.reflect.UndeclaredThrowableException ### Cause: java.lang.reflect.UndeclaredThrowableException at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:364) at com.sun.proxy.$Proxy4.selectList(Unknown Source) ..... Caused by: java.lang.NumberFormatException: For input string: "C" at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241) at java.lang.Double.parseDouble(Double.java:540) at org.apache.ibatis.ognl.OgnlOps.doubleValue(OgnlOps.java:259)
解决方案
来源:if判断字符串
判断应该写成 test='cateId == "A"' 或者test="cateId == 'A'.toString()"
<if test="cateId != null and cateId != ''"> <if test='cateId == "A"'> and a.cateId like 'E%' and a.cateId not like 'E50%' </if> <if test='cateId == "B"'> and a.cateId like 'S%' </if> <if test='cateId == "C"'> and a.cateId like 'G%' </if> <if test='cateId == "D"'> and a.cateId like 'E50%' </if> </if>