Mybatis---xml if表达式判断问题

在测试报表时遇到Mybatis XML中if表达式引发的数字转换异常。问题出在Mybatis将'y'解析为字符而非字符串导致判断错误。通过注释相关代码排除问题。解决方案包括使用特定方式来正确进行条件判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试别人的报表,前台报错提示查询失败。马上看后台报下面这个错误:

### Cause: java.lang.NumberFormatException: For input string: "y"
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:371)
	at com.sun.proxy.$Proxy22.selectList(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:205)
	at com.bonatone.eweb.service.impl.DefaultService.selectList(DefaultService.java:166)
	... 79 common frames omitted

数字转换异常的错误,然后看sql没发现有转换的错误啊,就看到一处判断有个y。

    <if test="flag == 'n' ">
		 AND h.START_TIME is null
 	</if>
	<if test="flag == 'y'">
		 AND h.START_TIME is not null
 	</if>

心想肯定这块的问题,我就先把这块注释掉。程序再次查询没有问题了。定位到这里也就是判断出的问题,可是为啥会报这个错误呢。原来是 Mybatis会将 “y” 解析为字符( 后台估计会变成uncode码吧),而非字符串,不能做到判断的效果。

那么问题来了怎么才能判断呢?

    <if test="flag == 'n'.toString()">
		 AND h.START_TIME is null
 	</if>
	<if test="flag == 'y'.toString()">
		 AND h.START_TIME is not null
 	</if>

或者
     <if test='flag == "n" '>
		 AND h.START_TIME is null
 	</if>
	<if test='flag == "y" '>
		 AND h.START_TIME is not null
 	</if>

这两种方式给大家参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值