1. 程式人生 > >關於Mybatis註解方式SQL的返回結果判斷

關於Mybatis註解方式SQL的返回結果判斷

舊系統改造,改造後的由過去的dao-service這種結構改成了直接repository裡的介面interface來直接註解(對應SQL-mapping的id)的方式進行對資料的操作。

問題來了,之前用的是batis我們有一個SqlMapClientDao來實現一個介面ibatisdao裡面一大堆方法,我們在SqlMapClientDao這個類裡面實現,對於update,insert操作是否成功我們會做一個判斷返回一個結果。如下圖:
這裡寫圖片描述
try catch獲取一個結果,是一個int型別,返回進行判斷1為操作正常無異常,其他就是出了問題。

問題來了新專案是註解的形式,怎樣定義介面獲取 update 和 insert 的結果,是否成功了更新一條資料,這是我們比較關心的。

我之前定義了一個關於更新的介面,這個介面是int型別,希望能接受一個值來判斷結果,然而執行起來總是報錯,不管你數的資料是否能符合條件能否成功更新到資料庫,都會拋一個異常。把型別改為void型別就沒事,這樣你就獲取不到返回結果,更何談如何判斷是否更新插入資料成功。

於是用debug模式來追蹤這個錯誤,點開expection e結果如下:
這裡寫圖片描述
這裡寫圖片描述
發現我們返回的型別必須是‘number’或者‘void’或者差不多相同,這就是為什麼我們填void型別就沒問題,之所以填int不行,應該是不接受基本型別只接受物件,這個number是一個超類,它包括很多子類像Float,Integer。

接受的是物件而不是基本型別我在batis裡ibatisdao裡看到的也能驗證:
這裡寫圖片描述

這時候,我們解決這個問題就簡單多了,我們直接給介面一個Integer型別就可以了,既然要的是物件,就給他一個物件例項。至於能不能設定一下,傳個Int基本型別可不可以,我暫時沒想到,因為我們這個框架封裝的嚴實,看不到裡面具體的操作。
最後一句話,就是debug真TM好用。