Java 导入20万数据 Mybatis和Excel 处理

简介: 最近在处理导入数据需求,原来的数据是几千行导入,一般的代码可满足。但是在导入数据进却发现一个excel有20几万数据,各种问题就出来了,首先是数据库会撑爆,因excel读入的数据太多内存也会溢出。

一、读取Excel数据,防止内存溢出
1、pom.xml导入依赖包

   <dependency>
         <groupId>com.monitorjbl</groupId>
         <artifactId>xlsx-streamer</artifactId>
         <version>2.1.0</version>
    </dependency>

2、核心代码如下:

public void importFinanceCostByExcel(File file) {
   
        InputStream is = null;
              //数据库关键是这几步
        SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
        FinanceCostMapper financeCostBatchMapper = sqlSession.getMapper(FinanceCostMapper.class);
        int BATCH = 1000;

        try {
   
            is = new FileInputStream(file);
            Workbook workbook = StreamingReader.builder()
                    .rowCacheSize(1000)// number of rows to keep in memory (defaults to 10)
                    .bufferSize(1024)     // buffer size to use when reading InputStream to file (defaults to 1024)
                    .open(is);            // InputStream or File for XLSX file (required)
            Sheet sheet = workbook.getSheet("成本到箱表格");
            logger.info("Import Finance Cost Begin!");
            List<FinanceCost> financeCostList = new ArrayList<>();
            Date nowDate = new Date();
            int i = -1;
            for (Row row : sheet) {
   
                i++;
                if(i< 1)
                    continue;

                FinanceCost financeCost = this.excelRowToFinanceCost(row);
                financeCost.setAcreatedatetime(nowDate);
                financeCost.setAlastupdatetime(nowDate);
                financeCostBatchMapper.insert(financeCost);
                if(i != 0 && i % 1000 == 0) {
   
                    logger.info("Import Data : {} " ,i);
                    //批量新增
                    sqlSession .commit();
                    sqlSession.flushStatements();//这里还要研究一下,要不然数据库还是撑不住
                }

            }
            sqlSession.commit();
            sqlSession.close();
        } catch (FileNotFoundException e1) {
   
            e1.printStackTrace();
        } finally {
   
            if(is != null) {
   
                try {
   
                    is.close();
                } catch (IOException e) {
   
                    e.printStackTrace();
                }
            }
        }
        logger.info("Import Finance cost End!");
    }
相关文章
|
3月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
3月前
|
Python
将Excel特定某列数据删除
将Excel特定某列数据删除
|
3月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
5月前
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!
|
8月前
|
分布式计算 Hadoop 大数据
从Excel到Hadoop:数据规模的进化之路
从Excel到Hadoop:数据规模的进化之路
151 10
|
10月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
1988 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
10月前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
Java 开发者 Windows
Java 数据类型划分(字符型)|学习笔记
快速学习 Java 数据类型划分(字符型)
179 0
|
Java 开发者
Java 数据类型划分(整型类型)|学习笔记
快速学习 Java 数据类型划分(整型类型)
145 0
|
Java 开发者
Java 数据类型划分(初见 String 类)|学习笔记
快速学习 Java 数据类型划分(初见 String 类)
139 0

热门文章

最新文章