最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis 批量新增工具類實現(xiàn)示例

 更新時間:2025年06月06日 10:46:51   作者:Jamie Chyi  
本文主要介紹了MyBatis批量操作工具類MyBatisBatchExecutorUtil,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在實際開發(fā)中,批量操作數(shù)據(jù)庫是提升效率的常見做法。MyBatis 提供了對批量操作的支持,但通常需要手動配置。本文將介紹如何使用 MyBatis 批量提交數(shù)據(jù)的工具類,實現(xiàn)更高效的數(shù)據(jù)庫操作。

1. 工具類概述 ??

MyBatisBatchExecutorUtil 是一個 MyBatis 批量操作工具類,通過 SqlSessionFactory 提供批量提交數(shù)據(jù)的功能。我們可以通過此類將數(shù)據(jù)按一定數(shù)量分組,避免一次性提交大量數(shù)據(jù)造成的內(nèi)存壓力。

2. 工具類代碼 ??

package com.lili.office.utils;

import java.util.List;

import javax.annotation.PostConstruct;

import com.google.common.collect.Lists;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author JamieChyi
 */
@Component
public class MyBatisBatchExecutorUtil {
    private static final Logger logger = LoggerFactory.getLogger(MyBatisBatchExecutorUtil.class);

    @Autowired
    private SqlSessionFactory sqlSessionFactory;
    private static MyBatisBatchExecutorUtil utils;

    @PostConstruct
    public void init() {
        utils = this;
        utils.sqlSessionFactory = this.sqlSessionFactory;
    }

    /**
     * 批量提交數(shù)據(jù)
     *
     * @param mapperClass     Mapper 類
     * @param mybatisSqlId    SQL 語句在 Mapper XML 文件中的 ID
     * @param dataList        要提交的數(shù)據(jù)列表
     */
    public static <T> void batchCommit(Class<?> mapperClass, String mybatisSqlId, List<T> dataList) {
        if (dataList == null || dataList.isEmpty()) {
            return;
        }

        SqlSession session = null;
        int commitCountEveryTime = 500;
        try {
            long startTime = System.currentTimeMillis();
            session = utils.sqlSessionFactory.openSession(ExecutorType.BATCH, false);
            List<List<T>> groupList = Lists.partition(dataList, commitCountEveryTime);
            for (List<T> tempList : groupList) {
                session.insert(mapperClass.getName() + "." + mybatisSqlId, tempList);
                session.commit();
                session.clearCache();
            }
            long endTime = System.currentTimeMillis();
            logger.info("批量插入數(shù)據(jù)耗時:" + (endTime - startTime) + "毫秒");
        } catch (Exception e) {
            logger.error("batchCommit error!", e);
            if (session != null) {
                session.rollback();
            }
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

    public static <T> void batchCommit(Class<?> mapperClass, List<T> dataList) {
        batchCommit(mapperClass, "insertPOBatch", dataList);
    }
}

解釋:

  • @Autowired 注解通過 Spring 注入 SqlSessionFactory 實例。

  • @PostConstruct 用于在類初始化后執(zhí)行初始化操作。

  • 批量提交邏輯通過將數(shù)據(jù)分批處理來避免一次性提交過多數(shù)據(jù)。

  • ExecutorType.BATCH:使用批處理模式,提升性能。

  • 分批提交:每次提交 500 條數(shù)據(jù),避免單次提交數(shù)據(jù)過多導(dǎo)致內(nèi)存占用過大。

3. 批量提交數(shù)據(jù) ??

方法一:指定 SQL ID 提交數(shù)據(jù)

public static <T> void batchCommit(Class<?> mapperClass, String mybatisSqlId, List<T> dataList) {
    // 處理邏輯
}

方法二:默認(rèn)使用 insertPOBatch 提交數(shù)據(jù)

public static <T> void batchCommit(Class<?> mapperClass, List<T> dataList) {
    batchCommit(mapperClass, "insertPOBatch", dataList);
}

解釋:

  • 第一種方法允許我們指定 Mapper 文件中的 SQL ID,可以靈活適應(yīng)不同場景。

  • 第二種方法為常用的批量插入,使用默認(rèn)的 SQL ID insertPOBatch

4. 性能優(yōu)化 ??

批量提交數(shù)據(jù)能夠顯著提高性能,尤其是在處理大量數(shù)據(jù)時。通過將數(shù)據(jù)分批提交,可以避免一次性提交過多數(shù)據(jù)導(dǎo)致內(nèi)存溢出的問題。每次提交的數(shù)據(jù)量可以根據(jù)具體需求調(diào)整,通常使用 500 條作為合適的批次大小。

性能測試:

long startTime = System.currentTimeMillis();
// 執(zhí)行批量操作
long endTime = System.currentTimeMillis();
logger.info("批量插入數(shù)據(jù)耗時:" + (endTime - startTime) + "毫秒");

通過日志記錄,開發(fā)者可以及時了解批量提交的執(zhí)行時間,并進(jìn)行性能調(diào)優(yōu)。

5. 異常處理 ??

在批量提交過程中,我們應(yīng)該特別注意異常處理:

  • 如果出現(xiàn)異常,應(yīng)該執(zhí)行回滾操作,確保數(shù)據(jù)一致性。

  • 批量操作使用事務(wù)管理,可以在遇到問題時避免部分?jǐn)?shù)據(jù)提交成功而其他數(shù)據(jù)失敗的情況。

catch (Exception e) {
    logger.error("batchCommit error!", e);
    if (session != null) {
        session.rollback();
    }
}

總結(jié) ??

通過 MyBatisBatchExecutorUtil 工具類,我們可以輕松實現(xiàn) MyBatis 的批量提交操作,避免性能瓶頸和內(nèi)存壓力。合理的批量操作能夠顯著提升系統(tǒng)在處理大規(guī)模數(shù)據(jù)時的效率,是開發(fā)中必不可少的利器。

到此這篇關(guān)于MyBatis 批量新增工具類實現(xiàn)示例的文章就介紹到這了,更多相關(guān)MyBatis 批量新增工具類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java基礎(chǔ)之包裝類的介紹及使用

    java基礎(chǔ)之包裝類的介紹及使用

    今天帶大家復(fù)習(xí)Java基礎(chǔ)知識,文中對Java包裝類作了非常詳細(xì)的介紹及總結(jié),對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Java實戰(zhàn)之小米交易商城系統(tǒng)的實現(xiàn)

    Java實戰(zhàn)之小米交易商城系統(tǒng)的實現(xiàn)

    這篇文章將利用Java實現(xiàn)小米交易商城系統(tǒng),文中采用的技術(shù)有:JSP?、Spring、SpringMVC、MyBatis等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-04-04
  • java清除u盤內(nèi)存卡里的垃圾文件示例

    java清除u盤內(nèi)存卡里的垃圾文件示例

    手機(jī)內(nèi)存卡空間被用光了,但又不知道哪個文件占用了太大,一個個文件夾去找又太麻煩,開發(fā)了個小程序把手機(jī)所有文件(包括路徑下所有層次子文件夾下的文件)進(jìn)行一個排序,這樣你就可以找出哪個文件占用了內(nèi)存太大了
    2014-02-02
  • Java中BEAN與EJB的區(qū)別淺析

    Java中BEAN與EJB的區(qū)別淺析

    這篇文章主要介紹了Java中BEAN與EJB的區(qū)別淺析,本文總結(jié)了它們之間的不同之處,需要的朋友可以參考下
    2015-03-03
  • Java中方法的重載與重寫舉例比較

    Java中方法的重載與重寫舉例比較

    這篇文章主要給大家介紹了關(guān)于Java中方法的重載與重寫的相關(guān)資料,Java中的方法重載和重寫是面向?qū)ο缶幊讨械膬蓚€重要概念,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Spring注解之@Import注解的使用和源碼分析

    Spring注解之@Import注解的使用和源碼分析

    今天主要介紹Spring @Import注解,在Spring中@Import使用得比較頻繁,它得作用是導(dǎo)入bean,具體的導(dǎo)入方式有多種,特別在SpringBoot項目中,很多地方都使用到了@Import注解,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • RedisTemplate和Redisson的區(qū)別

    RedisTemplate和Redisson的區(qū)別

    本文主要介紹了RedisTemplate和Redisson的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • 根據(jù)URL下載圖片至客戶端、服務(wù)器的簡單實例

    根據(jù)URL下載圖片至客戶端、服務(wù)器的簡單實例

    下面小編就為大家?guī)硪黄鶕?jù)URL下載圖片至客戶端、服務(wù)器的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Mybatis常用分頁插件實現(xiàn)快速分頁處理技巧

    Mybatis常用分頁插件實現(xiàn)快速分頁處理技巧

    這篇文章主要介紹了Mybatis常用分頁插件實現(xiàn)快速分頁處理的方法。非常不錯具有參考借鑒價值,感興趣的朋友一起看看
    2016-10-10
  • Java 數(shù)據(jù)庫連接池 Tomcat介紹

    Java 數(shù)據(jù)庫連接池 Tomcat介紹

    這篇文章主要給大家分享了 Java 數(shù)據(jù)庫連接池 Tomcat介紹,omcat 是一個小型的輕量級應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP 程序的首選。下面來看看文章內(nèi)容的詳細(xì)介紹吧
    2021-11-11

最新評論

延庆县| 黄浦区| 社旗县| 正宁县| 怀仁县| 鲁甸县| 吉隆县| 鄱阳县| 罗源县| 织金县| 台中县| 桓台县| 鱼台县| 揭西县| 南华县| 天等县| 丁青县| 永川市| 普陀区| 福海县| 资阳市| 来安县| 滨海县| 苍溪县| 灵丘县| 利川市| 安溪县| 江山市| 酒泉市| 金平| 永川市| 寿阳县| 金山区| 诏安县| 宁海县| 平南县| 广灵县| 晋州市| 墨竹工卡县| 洛扎县| 禹州市|