Mybatis中关于字符串参数的判断

Posted 默慊$

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis中关于字符串参数的判断相关的知识,希望对你有一定的参考价值。

我们在使用mybatis时经常会遇到对传入参数的判断,之前在Integer类型的判断上我就踩了个小坑,本次在String类型这又被绊倒了,平时用这些没留意的话真的是有大大小小的坑在前边,一不留神就栽里面了。排查原因比较浪费时间,在这里我分享下我的踩坑记录,帮兄弟们避避雷。

先上代码 

--这个是最常用到的判断是否传入该参数来添加限制条件的
<if test="status != null and status != ''">
    and  rf.status = #{status}
</if>

--再来看这个判断为某固定值的
<if test="status != null and status == '1'">
   AND type in ('100','10')
</if>

判断空值的是没有问题的,但是在判断固定值的时候我发现条件始终是不成立的,在sql的打印中发现参数的确传入下来了,类型也没有问题,但是就是不执行,于是看了看Mybatis对String类型的解析,mybatis是用OGNL表达式来解析的,在OGNL的表达式中,’1’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if标签中的sql不会被解析,导致一直不成立...

问题不大,知道原因就好解决了,两种解决途径:

--1、将''放在外层,""放在内层,解析就可以顺利解析了
<if test='status != null and status == "1"'>
    AND type in ('100','10')
</if>
--2、加.toString()方法
<if test="status != null and status == '1'.toString()">
   AND type in ('100','10')
</if>

感觉有帮助的兄弟点赞支持下,拜谢!

以上是关于Mybatis中关于字符串参数的判断的主要内容,如果未能解决你的问题,请参考以下文章

mybatis中关于ognl表达式冲突怎么解决

mybatis中关于年,季,月,周,日的统计问题

批处理中关于文件名字符串的判别

Linux的shell脚本中关于字符串判断是否为空的问题

SpringBoot中关于Mybatis使用的三个问题

mybatis 参数判断条件