如果數據庫是時間類型而且你傳的值也是時間類型,可以直接比較。
第一種方法: 把轉義字符">"和"<"替換掉.
<if test="startTime != null ">
AND order_date >= #{startTime,jdbcType=DATE}
</if>
<if test="endTime != nul ">
AND order_date <= #{endTime,jdbcType=DATE}
</if>
第二種方法: 使用<![CDATA[ ]]>符號進行說明,將此類符號不進行解析
<if test="startTime != null ">
AND <![CDATA[ order_date >= #{startTime,jdbcType=DATE} ]]>
</if>
<if test="endTime != null ">
AND <![CDATA[ order_date <= #{endTime,jdbcType=DATE} ]]>
</if>
注意date類型不用判斷="",要不然會報錯的。
並且jdbcType=DATE,參數中的date格式爲yyyy-mm-dd,不帶時分秒,查詢到某天這種。
如果需要精確到時分秒,需要將jdbcType設置成TIMESTAMP。
參考:https://blog.csdn.net/u010526028/article/details/74315775/
jdbcType=DATE的時候 只能和2018-09-06比較。
有格式的日期比較,可以使用date_format方法
<if test="creationDate != null">
<![CDATA[ AND DATE_FORMAT(a.creation_date, '%Y-%m-%d') = DATE_FORMAT(#{creationDate,jdbcType=DATE},'%Y-%m-%d')]]>
</if>
Error updating database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String異常處理
如果拿傳入的時間類型參數與空字符串‘‘進行對比判斷則會引發異常.,所以應該去掉該判斷, 只保留非空判斷就正常了
1 2 3 4 5 |
|
改爲
1 2 3 4 5 |
|
1 2 3 4 5 |
|
1 2 3 4 5 |
|