mybatis中由於不理解$與#而出現的bug

最近項目中遇到一個bug,正常的流程是這樣的:要上傳一個應用,首先檢查系統中是否已經存在這個應用的更高版本,若是存在,則上傳操做將被取消。sql

bug體現爲當傳入系統中存在的全部應用與新上傳的應用的versioncode都小於10,則上傳可以成功,而當傳入一個versioncode=10的應用時判斷存在更高版本,操做被取消。復現並定位這個問題之後,考慮到對比versioncode處的代碼應該有問題,查看以下:app

mapper.xml裏有這樣一句:spa

and t.versioncode >= #{versioncode}code

這樣轉爲sql後爲:and t.versioncode>= "10",xml

也就是說這裏進行了一次字符串的比較,比較的結果是9>'10'字符串

知道問題的緣由了,bug修改以下:io

and t.versioncode >= ${versioncode}
map

這樣轉爲sql後爲:and t.versioncode>= 10,也就是說這裏進行了一次數字的比較,比較的結果是9<10bug

問題解決了,但願同志們不要再出這樣的bug嘍,查找起來起來好麻煩的。。。項目

相關文章
相關標籤/搜索