起因
在项目中遇到一个BUG,而且这个BUG还不知道因为什么,找了一下错误的原因,是因为在mybatis的SQL语句不匹配的问题
mybatis有一个if标签,可以做判断,我用了 某某 == 1时做相应的SQL操作,最后BUG的原因是因为这个
<if test="carrier != null and carrier !='' and carrier !='0'">
AND CARRIER = #{carrier}
</if>
查阅了一下资料
要在carrier字段不为null,”,和”0”的时候增加以上条件,但是以上当carrier等于”0”时,并不生效。
原因
mybatis是用OGNL表达式来解析的,在OGNL的表达式中,’0’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,
所以if标签中的sql不会被解析。
解决办法
- 换成双引号
<if test='carrier != null and carrier !="" and carrier !="0"'>
AND CARRIER = #{carrier}
</if>
- 加toSting()
<if test="carrier != null and carrier !='' and carrier !='0'.toString()">
AND CARRIER = #{carrier}
</if>
总结
单个的字符要写到双引号里面或者使用.toString()才行