当前位置: 代码网 > it编程>编程语言>Java > MyBatis 批量新增工具类实现示例

MyBatis 批量新增工具类实现示例

2025年06月06日 Java 我要评论
在实际开发中,批量操作数据库是提升效率的常见做法。mybatis 提供了对批量操作的支持,但通常需要手动配置。本文将介绍如何使用 mybatis 批量提交数据的工具类,实现更高效的数据库操作。1. 工

在实际开发中,批量操作数据库是提升效率的常见做法。mybatis 提供了对批量操作的支持,但通常需要手动配置。本文将介绍如何使用 mybatis 批量提交数据的工具类,实现更高效的数据库操作。

1. 工具类概述 🔧

mybatisbatchexecutorutil 是一个 mybatis 批量操作工具类,通过 sqlsessionfactory 提供批量提交数据的功能。我们可以通过此类将数据按一定数量分组,避免一次性提交大量数据造成的内存压力。

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;
    }

    /**
     * 批量提交数据
     *
     * @param mapperclass     mapper 类
     * @param mybatissqlid    sql 语句在 mapper xml 文件中的 id
     * @param datalist        要提交的数据列表
     */
    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("批量插入数据耗时:" + (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 用于在类初始化后执行初始化操作。

  • 批量提交逻辑通过将数据分批处理来避免一次性提交过多数据。

  • executortype.batch:使用批处理模式,提升性能。

  • 分批提交:每次提交 500 条数据,避免单次提交数据过多导致内存占用过大。

3. 批量提交数据 🌟

方法一:指定 sql id 提交数据

public static <t> void batchcommit(class<?> mapperclass, string mybatissqlid, list<t> datalist) {
    // 处理逻辑
}

方法二:默认使用 insertpobatch 提交数据

public static <t> void batchcommit(class<?> mapperclass, list<t> datalist) {
    batchcommit(mapperclass, "insertpobatch", datalist);
}

解释:

  • 第一种方法允许我们指定 mapper 文件中的 sql id,可以灵活适应不同场景。

  • 第二种方法为常用的批量插入,使用默认的 sql id insertpobatch

4. 性能优化 ⏱️

批量提交数据能够显著提高性能,尤其是在处理大量数据时。通过将数据分批提交,可以避免一次性提交过多数据导致内存溢出的问题。每次提交的数据量可以根据具体需求调整,通常使用 500 条作为合适的批次大小。

性能测试:

long starttime = system.currenttimemillis();
// 执行批量操作
long endtime = system.currenttimemillis();
logger.info("批量插入数据耗时:" + (endtime - starttime) + "毫秒");

通过日志记录,开发者可以及时了解批量提交的执行时间,并进行性能调优。

5. 异常处理 ⚠️

在批量提交过程中,我们应该特别注意异常处理:

  • 如果出现异常,应该执行回滚操作,确保数据一致性。

  • 批量操作使用事务管理,可以在遇到问题时避免部分数据提交成功而其他数据失败的情况。

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

总结 📚

通过 mybatisbatchexecutorutil 工具类,我们可以轻松实现 mybatis 的批量提交操作,避免性能瓶颈和内存压力。合理的批量操作能够显著提升系统在处理大规模数据时的效率,是开发中必不可少的利器。

到此这篇关于mybatis 批量新增工具类实现示例的文章就介绍到这了,更多相关mybatis 批量新增工具类内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com