在实际开发中遇到需要进行时间筛选的情况,mapper文件片段如下
<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>
结果抛出如标题所示的错误
invalid comparison java.util.Date and java.lang.String
查了一下大概是因为
mybatis 3.3.0中对于时间参数进行比较时的一个bug. 如果拿传入的时间类型参数与空字符串进行对比判断会引发异常
然后把代码改为
<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>
即可