mybatis date問題

如果數據庫是時間類型而且你傳的值也是時間類型,可以直接比較。

第一種方法:    把轉義字符">"和"<"替換掉.

<if test="startTime != null ">
    AND order_date &gt;= #{startTime,jdbcType=DATE} 
</if>
<if test="endTime != nul ">
    AND order_date &lt;= #{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

<if test="createTime != null and createTime !=‘‘ " >

 

   date(create_time) = date(#{createTime,jdbcType=TIMESTAMP})

 

 </if>

改爲

1

2

3

4

5

<if test="createTime != null"> 

 

    date(create_time) = date(#{createTime,jdbcType=TIMESTAMP}) 

 

</if

  

1

2

3

4

5

<if test="createTime != null and createTime !=‘‘ " >

 

   date(create_time) = date(#{createTime,jdbcType=TIMESTAMP})

 

 </if> 改爲

1

2

3

4

5

<if test="createTime != null"> 

 

    date(create_time) = date(#{createTime,jdbcType=TIMESTAMP}) 

 

</if>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章