回覆列表
  • 1 # 懂點程式碼的大叔

    我猜測題主可能是用的在sqlMapper中使用foreach的方式來進行批次處理了,其實不太建議使用這種方式進行批次處理,因為當批次資料量大的時候會出現效能問題了。如果題主堅持要用這種方式也請保持foreach的數量保持在50條以內。

    Mybatis官方其實也推薦了批次處理的方式,題主可以試試,這種批次處理的方式批次插入上萬條效能也不會太差。另外,我覺得如果用官方推薦的方式其實也不會有這個問題了。

    官方文件:https://mybatis.org/mybatis-dynamic-sql/docs/insert.html?spm=ata.13261165.0.0.4dc71d1dlF3NxT

    備註:提供的是批次插入,批次修改也類似

  • 2 # Mirson

    這是個技術點,做過mybatis開發的人才明白你的意思。

    具體場景:

    例一:比如資料的修復,透過監控發現有一百條資料需要修改狀態,這時候我們要提供一個修復介面,這個介面必須要返回具體修復的數量。

    例二:高併發場景下,比如秒殺,都對同一個商品操作,怎麼知道對庫存商品的修改是否成功,透過結果再判斷是否需要回滾。

    要實現並不難,方法有很多,但有沒有效率高,而且實現簡單的方法?答案是有的。

    怎麼做呢?就是要修改jdbc url的顯示引數。

    預設我們的連線是採用這種方式:

    jdbc:mysql://jdbc.host/{jdbc.db}

    只需再加上一個顯示引數useAffectedRows,如下所示:

    jdbc:mysql://jdbc.host/{jdbc.db}?useAffectedRows=true

    該引數作用就是返回資料操作受影響的行數。不需要改業務邏輯,不需要調整介面,就能簡單高效實現。

    用這個引數但要注意一點,如果沒有修改到任何資料,返回結果是為0。

    最後,可以根據顯示引數從網上找案例做更為詳細瞭解。

  • 中秋節和大豐收的關聯?
  • 羊吃草不吃料是怎麼了?