mybatis报错invalid comparison java.util.Date and java.lang.String

在实际开发中遇到需要进行时间筛选的情况,mapper文件片段如下

1
2
3
4
5
6
<if test="beginTime!=null and beginTime!=''">
<![CDATA[and DATE_FORMAT(A.begin_time, '%Y-%m-%d %H:%T:%s') >= DATE_FORMAT(#{beginTime}, '%Y-%m-%d %H:%T:%s')]]>
</if>
<if test="endTime!=null and endTime!=''">
<![CDATA[and DATE_FORMAT(A.end_time, '%Y-%m-%d %H:%T:%s') <= DATE_FORMAT(#{endTime}, '%Y-%m-%d %H:%T:%s')]]>
</if>

结果抛出如标题所示的错误

1
invalid comparison java.util.Date and java.lang.String

查了一下大概是因为

mybatis 3.3.0中对于时间参数进行比较时的一个bug. 如果拿传入的时间类型参数与空字符串进行对比判断会引发异常

然后把代码改为

1
2
3
4
5
6
<if test="beginTime!=null">
<![CDATA[and DATE_FORMAT(A.begin_time, '%Y-%m-%d %H:%T:%s') >= DATE_FORMAT(#{beginTime}, '%Y-%m-%d %H:%T:%s')]]>
</if>
<if test="endTime!=null">
<![CDATA[and DATE_FORMAT(A.end_time, '%Y-%m-%d %H:%T:%s') <= DATE_FORMAT(#{endTime}, '%Y-%m-%d %H:%T:%s')]]>
</if>

即可