回覆列表
-
1 # 懂點程式碼的大叔
-
2 # Mirson
這是個技術點,做過mybatis開發的人才明白你的意思。
具體場景:
例一:比如資料的修復,透過監控發現有一百條資料需要修改狀態,這時候我們要提供一個修復介面,這個介面必須要返回具體修復的數量。
例二:高併發場景下,比如秒殺,都對同一個商品操作,怎麼知道對庫存商品的修改是否成功,透過結果再判斷是否需要回滾。
要實現並不難,方法有很多,但有沒有效率高,而且實現簡單的方法?答案是有的。
怎麼做呢?就是要修改jdbc url的顯示引數。
預設我們的連線是採用這種方式:
jdbc:mysql://jdbc.host/{jdbc.db}
只需再加上一個顯示引數useAffectedRows,如下所示:
jdbc:mysql://jdbc.host/{jdbc.db}?useAffectedRows=true
該引數作用就是返回資料操作受影響的行數。不需要改業務邏輯,不需要調整介面,就能簡單高效實現。
用這個引數但要注意一點,如果沒有修改到任何資料,返回結果是為0。
最後,可以根據顯示引數從網上找案例做更為詳細瞭解。
我猜測題主可能是用的在sqlMapper中使用foreach的方式來進行批次處理了,其實不太建議使用這種方式進行批次處理,因為當批次資料量大的時候會出現效能問題了。如果題主堅持要用這種方式也請保持foreach的數量保持在50條以內。
Mybatis官方其實也推薦了批次處理的方式,題主可以試試,這種批次處理的方式批次插入上萬條效能也不會太差。另外,我覺得如果用官方推薦的方式其實也不會有這個問題了。
官方文件:https://mybatis.org/mybatis-dynamic-sql/docs/insert.html?spm=ata.13261165.0.0.4dc71d1dlF3NxT
備註:提供的是批次插入,批次修改也類似