Mybatis Update操作返回值問題

2021-09-07 20:25:01 字數 1735 閱讀 2780

如果定義乙個如下的update函式,那麼這個函式的返回值到底是啥意思呢?是受影響的行數嗎?

函式定義

驗證之前我們先看看資料庫中的資料記錄。總共兩條資料記錄!

資料記錄

jdbc.driver=com.mysql.jdbc.driver

jdbc.url=jdbc:mysql://localhost:3306/ssm

jdbc.username=root

jdbc.password=123456

下面看看我們的單元測試類。

單元測試類

我們根據 id 獲取記錄,然把使用者名稱由 root 改為 root001。如果說返回值是影響的行數的話,那麼應該返回 1.跟我們的預期結果 1 是相符的。單元測試會通過。

單元測試通過

單元測試通過,我們看看資料庫中的記錄有沒有變化。

資料庫記錄

看起來貌似沒有任何問題。單元測試通過,資料庫的確是只有一條記錄更改了。這說明 mybatis 的 update 操作返回值的確是受影響的行數。

真的是這樣嗎

我們知道當資料庫中的記錄被修改之後,我們在次執行相同的 update 語句將不會影響到資料記錄行數。

按照這個邏輯來講的話,在此執行此單元測試,返回值應該為 0,跟我們的預期值 1 不同,單元測試應該不通過。再次執行單元測試:

單元測試通過

我去,單元測試居然神奇般的通過了。。。請注意看,我們在命令列執行 update 語句那張圖,返回的 matched 數量為 1。所以預設情況下,mybatis 的 update 操作的返回值是 matched 的記錄數,並不是受影響的記錄數。

那麼有沒有辦法讓 mybatis 的 update 操作的返回值是受影響的行數呢。因為我們業務邏輯中有時會根據這個返回值做業務判斷。答案當然是有的。

修改資料庫鏈結配置為:增加了 useaffectedrows 字段資訊。

jdbc.driver=com.mysql.jdbc.driver

jdbc.url=jdbc:mysql://localhost:3306/ssm?useaffectedrows=true jdbc.username=root jdbc.password=123456

再次執行單元測試:

單元測試失敗

從報錯資訊可以清晰的看出,返回值是 0,跟我們的預期值 1 不同。

Mybatis Update操作返回值

後端的資料持久化使用的是 mybatis 在做高併發下賬戶增減餘額的時候,打算使用樂觀鎖來解決這個問題。在獲取update操作的返回值時遇到了乙個問題,似乎 mybatis 進行 update 操作得到的 int 返回值並不是影響的行數。這下就尷尬了。資料庫連線配置為 接來下,我們來編寫乙個簡單的單...

Mybatis Update操作返回值問題

後端的資料持久化使用的是 mybatis 在做高併發下賬戶增減餘額的時候,打算使用樂觀鎖來解決這個問題。在獲取update操作的返回值時遇到了乙個問題,似乎 mybatis 進行 update 操作得到的 int 返回值並不是影響的行數。這下就尷尬了。到底 update 返回值代表什麼呢?我們來驗證...

只用 操作實現 , , 操作

減法 a b a b 乘法 a b相當於將a累加abs b 次 除法 相當於將abs a 減去 abs b 的次數 求lhs的反面值rhs,即求rhs使得lhs rhs 0 int negate int lhs return ret int abs int lhs 返回i的絕對值 lhs rhs l...