今天在寫項目的時候,涉及到一個時間格式,由前端傳入,格式為yyyy-MM-dd HH-mm-ss ,但是傳入的時候服務(wù)器報了500,Mapper開發(fā)是用的xml進行開發(fā),類型是<update>
看了一下控制臺
##?Error?querying?database.??Cause:?java.lang.IllegalArgumentException:?invalid?comparison:?java.util.Date?and?java.lang.String
剛開始是以為前端傳入的格式出錯,于是自己又進行formaDate一次,發(fā)現(xiàn)也不可以,還是報同樣的錯.
我仔細看了自己的xml,發(fā)現(xiàn)在調(diào)用<insert>的時候也進行傳入Date類型的數(shù)據(jù),而且是同一個數(shù)據(jù),竟然沒有報錯,我隱隱約約感覺到是xml在某個地方有些問題.于是我翻看<update>的xml語句
<if test="orderTime!=null ?and orderTime!=' ' ">
order_time = #{orderTime}
</if>
發(fā)現(xiàn)這里是和<insert>唯一不同的地方,就是加上了動態(tài)sql<if>標(biāo)簽,
于是我去了<if>判斷,發(fā)現(xiàn)莫名奇妙的好了,我想了一下,我們還是需要動態(tài)判斷非空啊,再仔細思考一下,前端傳入的是String類型,去和null對比,應(yīng)該沒什么事情,于是我先加上了
<if test="orderTime!=null ">
????order_time = #{orderTime}
</if>
發(fā)現(xiàn)可以用,并沒有報錯,于是我單獨加上
<if test="orderTime!='' ">
????order_time = #{orderTime}
</if>
發(fā)現(xiàn)報錯了,找到錯誤原因,就去查了一下,原來是mybatis對于時間參數(shù)進行比較時的一個bug.
?如果拿傳入的時間類型參數(shù)與空字符串''進行對比判斷則會引發(fā)異常. 所以在上面的代碼中去該該判斷, 只保留非空判斷就正常了