mybatis 樂觀鎖設定並測試 xml寫法

2021-10-24 14:38:16 字數 1653 閱讀 4315

總是認為不會產生併發問題,每次去取資料的時候總認為不會有其他執行緒對資料進行修改,因此不會上鎖。但是在更新時會判斷其他執行緒在這之前有沒有對資料進行修改(一般會檢查version有沒有修改),一般會使用版本號機制或cas操作實現。

1. select data as old_data, version as old_version from …;

2. 根據獲取的資料進行業務操作,得到new_data和new_version

3. update set data = new_data, version = new_version where version = old_version

if(updated row > 0)

else

@data

@noargsconstructor

@allargsconstructor

public

class

article

implements

serializable

//更新文章

public

void

updatearticle

(article article)

;

//更新文章

public

void

updatearticle

(article article)

;

"updatearticle"

parametertype

="article"

>

update articles set

view_num =(case when #=null then view_num else # end),

comment_num=(case when #=null then comment_num else # end),

category_id=(case when #=null then category_id else # end),

like_num=(case when #=null then like_num else # end),

version = version + 1

where article_id=# and version = #

update

>

主要就是加了version的判斷

因為article2插隊,article1的更新沒有成功,樂觀鎖起了作用。其實mybatis-plus中可以自動配置樂觀鎖,但這裡還是記錄一下sql原生樂觀鎖的實現方式。

mybatis 樂觀鎖和邏輯刪除

本篇介紹easymybatis如配置樂觀鎖和邏輯刪除。easymybatis提供的樂觀鎖使用方式跟jpa一樣,使用 version註解來實現。即 資料庫增加乙個int或long型別欄位version,然後實體類version欄位上加上 version註解即可。實現原理是根據mysql的行鎖機制 in...

MyBatis 實現樂觀鎖遇到的問題

mybatis 通過版本號方式實現樂觀鎖 1.先查詢出 select status,version from t table where status 1 and xx 2.修改使用狀態status為2 update t table set status 2,version version 1 wh...

樂觀鎖以及樂觀鎖的實現

樂觀鎖以及樂觀鎖的實現 一 為什麼需要鎖 併發控制 在多使用者環境中,在同一時間可能會有多個使用者更新相同的記錄,這會產生衝突。這就是著名的併發性問題。典型的衝突有 1.丟失更新 乙個事務的更新覆蓋了其它事務的更新結果,就是所謂的更新丟失。例如 使用者a把值從6改為2,使用者b把值從2改為6,則使用...