欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL分批插入/更新數據方式

 更新時間:2025年02月07日 14:19:55   作者:天瑕  
文章介紹了如何使用MySQL分批插入/更新數據,以避免大 SQL 語句導致的更新失敗或拋出異常,通過手寫分批代碼或使用 Guava 庫的 partition 方法,可以簡化批量操作,同時,文章還提到如何使用 partition 方法進行分組查詢

MySQL分批插入/更新數據

在我們的日常開發(fā)中,經常會使用到批量insert/update的語句來實現(xiàn)相關的業(yè)務功能。而如果數據量比較大的話,會導致sql語句更新失敗、拋出異常的情況出現(xiàn)。

這個時候我們可以批量執(zhí)行sql語句,一批一批的執(zhí)行。

比如說現(xiàn)在有一個需要批量修改商品的方法

我們可以這么改造:

public void batchUpdateById(List<Product> productList) {
    if (CollectionUtils.isEmpty(productList)) {
        return;
    }

    if (productList.size() > CommonUtils.BATCH_NUMBER) {
        int sizeNum = productList.size();
        int startNum = 0;
        int endNum = CommonUtils.BATCH_NUMBER - 1;
        while (startNum < endNum) {
            productMapper.batchUpdateById(productList.subList(startNum, endNum));
            startNum += CommonUtils.BATCH_NUMBER - 1;
            endNum += CommonUtils.BATCH_NUMBER - 1;
            if (endNum > sizeNum - 1) {
                endNum = sizeNum;
            }
        }
    } else {
        productMapper.batchUpdateById(productList);
    }
}

上面BATCH_NUMBER的值是50,意味著當修改商品的數量大于50的時候,會以50個數據為一批,分批的執(zhí)行;而如果修改商品的數量不大于50的時候,就直接一次執(zhí)行就夠了。

上面是我們自己手寫的分批代碼,而如果每個方法都這么寫,也未免太過于繁瑣了。

這個時候我們就可以使用guava庫中關于集合的partition分組方法來進行簡化:

@Override
public void batchUpdateById(List<GoodsSkuBO> list) {
    if (CollectionUtils.isEmpty(list)) {
        return;
    }

    List<MerchantGoodsSkuDO> merchantGoodsSkuDOS = GoodsAnotherSkuConvertor.INSTANCE.goodsSkuBO2MerchantDOList(list);
    List<List<MerchantGoodsSkuDO>> groupMerchantGoodsSkuDOS = Lists.partition(merchantGoodsSkuDOS, CommonUtils.BATCH_NUMBER);
    groupMerchantGoodsSkuDOS.forEach(goodsSkuMasterMapper::batchUpdateById);
}

由上可以看到,代碼簡化了很多

(上面的goodsSkuBO2MerchantDOList方法只是將BO轉成DO,和分組邏輯沒有關系)。

而對于批量查詢的方法,我們也可以使用partition方法進行分組查詢,防止in條件拼接太多的數據導致sql報錯的情況出現(xiàn):

@Override
public List<GoodsSkuBO> listBySpuIdsSimple(List<Long> spuIds) {
    if (CollectionUtils.isEmpty(spuIds)) {
        return Collections.emptyList();
    }

    //去重
    spuIds = spuIds.stream().distinct().collect(Collectors.toList());
    List<List<Long>> groupSpuIds = Lists.partition(spuIds, CommonUtils.BATCH_NUMBER);
    List<MerchantGoodsSkuDO> spuIdList = groupSpuIds.stream().map(goodsSkuMasterMapper::listBySpuIds).flatMap(Collection::stream)
            .collect(Collectors.toList());
    return GoodsAnotherSkuConvertor.INSTANCE.merchantGoodsSkuDO2GoodsSkuBOList(spuIdList);
}

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 為什么代碼規(guī)范要求SQL語句不要過多的join

    為什么代碼規(guī)范要求SQL語句不要過多的join

    SQL中的join可以根據某些條件把指定的表給結合起來并將數據返回給客戶端,那么在項目開發(fā)中如果需要使用join語句,如何優(yōu)化提升性能?本文就來詳細的介紹一下
    2021-06-06
  • win2003服務器下配置 MySQL 群集(Cluster)的方法

    win2003服務器下配置 MySQL 群集(Cluster)的方法

    MySQL 群集是 MySQL 適合于分布式計算環(huán)境的高可用、高冗余版本。它采用了 NDB Cluster 存儲引擎,允許在 1 個群集中運行多個 MySQL 服務器。
    2010-12-12
  • MySQL與sqlyog安裝教程圖文詳解

    MySQL與sqlyog安裝教程圖文詳解

    這篇文章主要介紹了MySQL與sqlyog安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • mysql 悲觀鎖與樂觀鎖的理解及應用分析

    mysql 悲觀鎖與樂觀鎖的理解及應用分析

    這篇文章主要介紹了mysql 悲觀鎖與樂觀鎖的理解及應用,結合實例形式分析了MySQL數據庫悲觀鎖與樂觀鎖相關概念、原理、使用方法及相關操作注意事項,需要的朋友可以參考下
    2020-02-02
  • MySql優(yōu)化之InnoDB,4GB內存,多查詢的my.ini中文配置方案詳解

    MySql優(yōu)化之InnoDB,4GB內存,多查詢的my.ini中文配置方案詳解

    本文是一個針對 4G 內存系統(tǒng)(主要運行只有 InnoDB 表的 MySQL 并使用幾個連接數執(zhí)行復雜的查詢)的MySQL配置文件方案
    2018-03-03
  • mysql如何讀寫分離監(jiān)控

    mysql如何讀寫分離監(jiān)控

    本文介紹了如何通過Zookeeper對Mycat節(jié)點進行管理和監(jiān)控的詳細步驟,首先通過tar命令安裝Zookeeper,并配置相關文件,接著介紹了如何安裝和配置Mycat-web,包括修改配置文件中的IP地址和解決內存不足問題
    2024-11-11
  • mysql 模糊搜索的方法介紹

    mysql 模糊搜索的方法介紹

    本文將提供兩種方法,第一種最土的方法:使用like語句第二種用全文索引,接下來將為你詳細介紹
    2012-11-11
  • MySQL數據庫中CAST與CONVERT函數實現(xiàn)類型轉換的講解

    MySQL數據庫中CAST與CONVERT函數實現(xiàn)類型轉換的講解

    今天小編就為大家分享一篇關于MySQL數據庫中CAST與CONVERT函數實現(xiàn)類型轉換的講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • MySQL雙主配置的項目實踐

    MySQL雙主配置的項目實踐

    本文詳細介紹了配置兩臺MySQL服務器之間的主從復制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12
  • MySQL事務處理與應用簡析

    MySQL事務處理與應用簡析

    事務處理在各種管理系統(tǒng)中都有著廣泛的應用,比如人員管理系統(tǒng),很多同步數據庫操作大都需要用到事務處理。這篇文章主要介紹了MySQL事務處理,需要的朋友可以參考下
    2014-06-06

最新評論