最近專案中使用 mybatis 做為持久化層框架, 本來覺得還挺簡單的, 這個框架的整體感覺是簡單、直觀明瞭,比較容易上手, 可是剛開始就遇到個棘手的問題,以為是配置哪裡不對, 後來找了好久都沒查出問題。 最後請教高手,幫忙解決了難題。
問題簡要:
傳入引數為String型別,xml配置檔案也是VARCHAR型別,可以一旦傳入字元型別的資料,就會丟擲異常, Error querying database. Cause: java.lang.NumberFormatException: For input string: "XXX", 程式碼如下:
經過高手多方查詢, 解決方案如下:
這樣一來問題就解決了
參考資源 here
參考資源核心描述:
根據提示的資訊,我們很容易知道是資料格式化的時候出了問題,不過為什麼哪?我們定義的沒有錯呀!傳遞的也沒有錯呀!想不通,百度一下吧!下面是百度的一個結果,指明瞭引起錯誤原因的所在!是OGNL的語法問題,這裡'Y'將被認為是char型別的資料,但是'YY'或者“Y”將被認為是String型別的資料,解決方案如下所示:
1:將程式碼改為test="param eq 'Y'.toString()"
2:將程式碼改為test="name == "Y""
3:將程式碼改為test='index == "Y"'
當物件的對映檔案及對應的屬性如下編寫時,<result column="IF_SHIELD" property="ifShield" jdbcType="VARCHAR" /> private String ifShield;
<if test="ifShield==1">是沒問題的(並且數字是全部沒問題的,無論是小數還是整數是正數還是負數),不過這樣編寫<result column="IF_SHIELD" property="ifShield" jdbcType="CHAR" /> private String ifShield;
<if test="ifShield==1">就是有問題的。
參考如下:
http://www.cnblogs.com/tv151579/p/3297691.html
https://code.google.com/p/mybatis/issues/detail?id=262