MyBatis中报错‘Error querying database. Cause: java.lang.NumberFormatException: For input string: “XXX”’解决方案
SpringBoot项目中通过MyBatisPlus在mapper中查询数据时报错:【通用异常:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
Error querying database. Cause: java.lang.NumberFormatException: For input string: “Y”
Cause: java.lang.NumberFormatException: For input string: “Y”】
mapper中代码:
<if test="dto.insuCode != null and dto.insuCode !='' and dto.insuCode=='Y'">
and t.insu_code IS NOT NULL
</if>
查资料得知,报错原因为:mybatis是用OGNL表达式来解析的,在OGNL的表达式中,'Y’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if标签中的sql不会被解析,需要将’Y’改为"Y",或者加 .toString() 来转换。
所以可以将代码改为如下【注意 " 与 ‘ 的使用】:
<if test='dto.insuCode != null and dto.insuCode !="" and dto.insuCode=="Y"'>
and t.insu_code IS NULL
</if>
或者将字符转为字符串,改为:
<if test="dto.insuCode != null and dto.insuCode !='' and dto.insuCode=='Y'.toString()">
and t.insu_code IS NOT NULL
</if>