今天开发时遇到一个问题,下面是我写在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()后,条件能够成立。