在实际开发中遇到需要进行时间筛选的情况,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>
|
即可