mybaities if test 条件 参数转型的坑

昨天码代码,掉到坑里,耽误了几个小时才从坑里爬出来-_-|||

1.单个的字符要写到双引号,单引号单个字符当作char类型处理  2.如果是数值类型的String会自动转为int 进行比较 

原写法 "null != df_kh_id and df_kh_id != '0'"   传入的值为  0(String),

改为'null != df_kh_id and df_kh_id != 0'或者改为'null != df_kh_id and df_kh_id != "0"'


.xml文件的部分代码

    <if test="null != df_kh_id and df_kh_id != '0'">
		and 
			bbki.kh_id = #{df_kh_id}  		
		</if>
		<if test="null != df_kh_id and df_kh_id == '0'">
		and 
			bbki.kh_id = #{kh_id}  		
		</if>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

df_kh_id == '0'处出错,导致不执行if判断中的sql,运行程序不报错,没有任何提示。去掉df_kh_id == '0'  and 则可执行。对此我百思不得其解, 
因为自己有写过如下代码,是没错的。

 <if test="messageType == 'senderReceiveSuccess' ">
      ......
 </if>
 
 
  • 1
  • 2
  • 3

苦苦纠结了几个小时,最后是我的同事JW大神帮我解决的,膜拜大神o(≧v≦)o~~好棒 
<if test="df_kh_id== '0' and df_kh_id!= null "> 
改为<if test='df_kh_id == "0" and df_kh_id!= null '> 
或改为<if test="df_kh_id == '0'.toString() and df_kh_id!= null ">即可。

原因是:mybatis是用OGNL表达式来解析的,在OGNL的表达式中,’1’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if标签中的sql不会被解析。 
总结下使用方法:1.单个的字符要写到双引号里面或者使用.toString()才行!

   2 如果传入的String类型可转为int,也可以直接和int做比较!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值