记录一个问题:mybatis中if标签使用问题

272 阅读1分钟

今天开发时遇到一个问题,下面是我写在xml文件中的语句:

<if test="longTime != null and longTime.trim().toString() != '' and longTime == '1'">
    and login_time between concat(#{startDate},' 00:00:00') and concat(#{endDate},' 23:59:59')
</if>
<if test="longTime != null and longTime.trim().toString() != '' and longTime == '2'">
    and key_send_time between concat(#{startDate},' 00:00:00') and concat(#{endDate},' 23:59:59')
</if>

问题出在longTime == '1'这里,mybatis在进行解析的时候,会把'1'解析成字符串,但java是强类型语言,可能是java在进行==的时候,无法判断两个变量之间的关系,所以一般推荐下面的写法:

<if test="longTime != null and longTime.trim().toString() != '' and longTime == '1'.toString() ">
    and login_time between concat(#{startDate},' 00:00:00') and concat(#{endDate},' 23:59:59')
</if>
<if test="longTime != null and longTime.trim().toString() != '' and longTime == '2'.toString() ">
    and key_send_time between concat(#{startDate},' 00:00:00') and concat(#{endDate},' 23:59:59')
</if>

在加上toString()后,条件能够成立。