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

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

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

在實際開發(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ù)過多導致內(nèi)存占用過大。

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

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

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

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

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

解釋:

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

  • 第二種方法為常用的批量插入,使用默認的 SQL ID insertPOBatch。

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

批量提交數(shù)據(jù)能夠顯著提高性能,尤其是在處理大量數(shù)據(jù)時。通過將數(shù)據(jù)分批提交,可以避免一次性提交過多數(shù)據(jù)導致內(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í)行時間,并進行性能調(diào)優(yōu)。

5. 異常處理 ??

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

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

  • 批量操作使用事務(wù)管理,可以在遇到問題時避免部分數(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ù)習Java基礎(chǔ)知識,文中對Java包裝類作了非常詳細的介紹及總結(jié),對正在學習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等,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-04-04
  • java清除u盤內(nèi)存卡里的垃圾文件示例

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

    手機內(nèi)存卡空間被用光了,但又不知道哪個文件占用了太大,一個個文件夾去找又太麻煩,開發(fā)了個小程序把手機所有文件(包括路徑下所有層次子文件夾下的文件)進行一個排序,這樣你就可以找出哪個文件占用了內(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ū)ο缶幊讨械膬蓚€重要概念,文中介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Spring注解之@Import注解的使用和源碼分析

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

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

    RedisTemplate和Redisson的區(qū)別

    本文主要介紹了RedisTemplate和Redisson的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    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)容的詳細介紹吧
    2021-11-11

最新評論

得荣县| 岐山县| 芦山县| 林州市| 饶阳县| 项城市| 伊吾县| 安多县| 长岭县| 石门县| 高雄市| 莱西市| 麟游县| 哈密市| 墨竹工卡县| 浦东新区| 桃园县| 裕民县| 抚州市| 德清县| 封开县| 武威市| 西林县| 兰州市| 澳门| 安新县| 钟山县| 罗源县| 天长市| 崇义县| 临沂市| 鸡西市| 兴国县| 石泉县| 乌恰县| 潮安县| 钟祥市| 澜沧| 和林格尔县| 东乌珠穆沁旗| 平邑县|