mybatis xml中<if test 判断字符串的总结

文章探讨了在MyBatis中使用if标签进行条件拼接时,不同数据类型(字母和数字)以及是否使用toString()方法对查询的影响。当使用单个字母而不加toString()时,会导致NumberFormatException;不带toString()的单个数字会引发反射异常或无法拼接SQL条件。而使用双字母或数字则没有此类问题。带toString()的方法可以避免这些异常,但不带toString()的数字在某些情况下能正常拼接SQL。

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

1.使用字母

1.1单个字母(不区分大小写)
1.1.1不带toString()
	<if test="kbtu == 'B'">and
		MTK.KODHA_NAME = #{kbtu}
	</if>

报错信息如下

org.mybatis.spring.MyBatisSystemException: 
nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.NumberFormatException: For input string: "B"
Cause: java.lang.NumberFormatException: For input string: "B"
1.1.1.1不带toString(), 不带单引号
	<if test="kbtu == a">and
		MTK.KODHA_NAME = #{kbtu}
	</if>

报错信息如下

org.mybatis.spring.MyBatisSystemException: 
nested exception is org.apache.ibatis.reflection.ReflectionException: 
There is no getter for property named 'a' in 'class com.cll.entity.UserEntity'
1.1.2带toString()
	<if test="kbtu == 'B'.toString()">and
		MTK.KODHA_NAME = #{kbtu}
	</if>

无报错

1.2双字母(两个字母以上)(不区分大小写)
1.2.1不带toString()
	<if test="kbtu == 'BB'">and
		MTK.KODHA_NAME = #{kbtu}
	</if>

无报错

1.2.2带toString()
	<if test="kbtu == 'BB'.toString()">and
		MTK.KODHA_NAME = #{kbtu}
	</if>

无报错

2.使用数字

2.1单个数字
2.1.1不带toString()
	<if test="kbtu == '0'">and
		MTK.KODHA_NAME = #{kbtu}
	</if>

报错信息:不会拼接当前sql片段的条件

2.1.1.1不带toString(), 不带单引号
	<if test="kbtu == 0">and
		MTK.KODHA_NAME = #{kbtu}
	</if>

报错信息:拼接当前sql片段的条件

	<if test="kbtu == '0'">and
		MTK.KODHA_NAME = #{kbtu}
	</if>

报错信息:不会拼接当前sql片段的条件

2.1.2带toString()
	<if test="kbtu == '0'.toString()">and
		MTK.KODHA_NAME = #{kbtu}
	</if>

无报错

2.2双数字(两个数字以上)
2.2.1不带toString()
	<if test="kbtu == '00'">and
		MTK.KODHA_NAME = #{kbtu}
	</if>

无报错

2.2.2带toString()
	<if test="kbtu == '00'.toString()">and
		MTK.KODHA_NAME = #{kbtu}
	</if>

无报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值