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!");
    }
相关文章
|
21天前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
90 5
|
1月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
|
2月前
|
Java 数据库连接 数据库
mybatis查询数据,返回的对象少了一个字段
mybatis查询数据,返回的对象少了一个字段
192 8
|
1月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
52 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
21天前
|
Java API Apache
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
118 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
56 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
24天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
34 4
|
1月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
2月前
|
存储 Java
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
47 2
下一篇
无影云桌面