mybatis参数格式化异常:NumberFormatException: For input string:"xx"

1,239 阅读1分钟

使用mybatis注解开发的时候,总会遇到很多问题,但是mybatis的注解并不是那么的美好,一些问题或者错误根本不能给出准确的定位,有时候,甚至会给出Unknow Source的错误,获取就是一个关闭标签没有关上。此类问题,在xml配置中,mybatis做的比较好,所以,官方也不是很放心其注解,建议使用xml。

错误代码: 错误的引起,是"queryParam == '是'"引起的,原因给的是字符串,却拿一个数字比较,mybatis会做一些转化,结果在数字格式化时发生异常。

 <if test="queryParam != null and queryParam != ''">   
   	 <choose>
        <when test="queryField == 'handle'">
          and a.handle like concat('%', #{queryParam}, '%') 
        </when>
        <when test="queryField == 'iswinning'">
        	 <choose>
                 <when test="queryParam == '是'">   
                 	and a.iswinning ='1'
                 </when>
                 <when test="queryParam == '否'">   
                 	and a.iswinning ='2'
                 </when>
                 <when test="queryParam == '待定'">   
                 	and a.iswinning ='3'
                 </when>
                  <otherwise>
        		  </otherwise>
             </choose>
        </when>
        <otherwise>
        </otherwise>
 	</choose>
 </if>

#解决错误
引用网上https://segmentfault.com/q/1010000006574557 方法:

  • 一是:转成字符串:'0'.toString()
  • 二是:加转义实体字符串引号&quot;
<if test=\"startd != null and startd != &quot;0&quot;\">
  • 三是:外部单双引号交换:
<if test='startd != null and startd != \"0\"'>

注意:在xml配置中,使用第三种方式,不需要添加反斜杠("\"),

<if test='startd != null and startd != "0"'>