在写代码的途中正好在这个问题上遇难题了就顺手记录下来了

按着我的代码一路走下来就不会错了

写的比较简单    直接上代码 直接代码复用就可以了,比其他的写的要实际,记得改类名和包名

这个首先要导入一个easyexcel和poi 的依赖进pom包

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.10</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.16</version>
</dependency>

剩下的就是代码了

最主要的还是要多建立一个  ExcelListener 类用来写监听器(每写一个导入就要重新写一个监听)

package com.tunnel.boot.web.constructionriskcontrol.controller;import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.tunnel.boot.web.constructionriskcontrol.dto.TunnelMaterialManagementDTO;
import com.tunnel.boot.web.constructionriskcontrol.service.TunnelMaterialManagementService;
import lombok.extern.slf4j.Slf4j;import java.util.ArrayList;
import java.util.List;// 有个很重要的点 ExcelListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
@Slf4j
public class ExcelListener extends AnalysisEventListener<TunnelMaterialManagementDTO> {/*** 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收*/private static final int BATCH_COUNT = 3000;private final List<TunnelMaterialManagementDTO> list = new ArrayList<>();/*** 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。*/private final TunnelMaterialManagementService tunnelMaterialManagementService;/*** 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来*/public ExcelListener(TunnelMaterialManagementService tunnelMaterialManagementService) {this.tunnelMaterialManagementService = tunnelMaterialManagementService;}/*** 这个每一条数据解析都会来调用*/@Overridepublic void invoke(TunnelMaterialManagementDTO tunnelMaterialManagementDTO, AnalysisContext analysisContext) {log.info("解析到一条数据:========================{}", tunnelMaterialManagementDTO.toString());// 数据存储到datas,供批量处理,或后续自己业务逻辑处理。if (ObjectUtil.isNotEmpty(tunnelMaterialManagementDTO)) {list.add(tunnelMaterialManagementDTO);}// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOMif (list.size() >= BATCH_COUNT) {saveData();// 存储完成清理dataslist.clear();}}/*** 所有数据解析完成了 都会来调用*/@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {saveData();//确保所有数据都能入库}/*** 加上存储数据库*/private void saveData() {log.info("=============================={}条数据,开始存储到数据库", list.size());tunnelMaterialManagementService.saveList(list);}
}

conroller 层

  @RequestMapping("importExcel")@ResponseBodypublic String importExcel(@RequestParam(value = "file") MultipartFile file) throws IOException {EasyExcel.read(file.getInputStream(), TunnelMaterialManagementDTO.class, new ExcelListener(tunnelMaterialManagementService)).sheet().doRead();return "success";}

service层

  /*** 一次性存储导入的excel文件* @param list*/void saveList(List<TunnelMaterialManagementDTO> list);

impl层

  /*** 存列表,excel文件** @param list*/@Override@Transactionalpublic void saveList(List<TunnelMaterialManagementDTO> list) {list.forEach(v->{tunnelMaterialManagementMapper.insert(AppBeanUtil.convert(v,TunnelMaterialManagement.class));});}
​

mapper层

 /***excel导入*/int saveList(List<TunnelMaterialManagementDTO> tunnelMaterialManagementDTOList);
  

xml层

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tunnel.boot.web.constructionriskcontrol.mapper.TunnelMaterialManagementMapper"><!--一次性存储导入excel--><insert id="saveList" parameterType="java.util.List">insert into tunnel_material_management (task_name,material_number,specification,model_number,company,inventory_quantity,manager,contact_information,date_of_inventory,material_storage_location,remarks)values<foreach collection="list" item="item" index="index" separator=",">(#{item.taskName},#{item.materialNumber},#{item.specification},#{item.modelNumber},#{item.company},#{item.inventoryQuantity},#{item.manager},#{item.contactInformation},#{item.dateOfInventory},#{item.materialStorageLocation},#{item.remarks},#{item.typeOfMaterial})</foreach></insert></mapper>
​

【easyexcel】导入到数据库功能 正版实测相关推荐

  1. 教您如何三分钟搞定EasyExcel导入与导出功能

    文章目录 目录 前言 一.EasyExcel是什么? 二.使用步骤 1.引入库 2.导入 2.1创建对应excel表格的实体类 2.2后端接收请求入口 2.3业务处理 2.4监听器处理数据 3.导出 ...

  2. oracle新建用户sql局域,oracle 新建数据库,及创建用户,表空间,sqlplus导入导出数据库...

    oracle11G 新建数据库: 默认下一步: 默认下一步: 默认下一步: 填写数据库名下一步: 默认下一步: 完成,再按指示确定,就完成了数据库的创建. 数据库创建完后,在oracle11G Net ...

  3. 使用EasyExcel将本地excel数据读取后导入mysql数据库中

    本篇文章只记录EasyExcel的读(read) 一. EasyExcel 是做什么的? 首先看下EasyExcel解释: EasyExcel是阿里巴巴开源的一个excel处理框架,是一个基于Java ...

  4. 高质量实现单文件导入、导出功能(使用EasyExcel )

    前言 咋说呢,最近交接了一个XXX统计分析系统到我手上,显示页面平平无其,一看导入.导出功能的实现代码,每个小菜单目录里面都对应一个导入导出接口,看起来十分难受!(此处省略1w字内心os)正所谓前人栽 ...

  5. easyExcel 导入Excel数据

    easyExcel 导入Excel数据 最近公司项目需要导入几十万的Excel数据,我这里用的是现在最流行的easyExcel, 希望能帮助到你 首先导入jar包 <dependency> ...

  6. 【使用EasyExcel导入导出】

    使用EasyExcel导入导出 一,为什么要使用EasyExcel 1.1 EasyExcel与Poi的区别 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个 ...

  7. Spring Boot + EasyExcel 导入导出,好用到爆,可以扔掉 POI 了!

    欢迎关注方志朋的博客,回复"666"获面试宝典 一.EasyExcel EasyExcel是阿里巴巴开源poi插件之一,主要解决了poi框架使用复杂,sax解析模式不容易操作,数据 ...

  8. cmd导入oracle库文件,cmd 导入oracle数据库

    从服务器将Oracle数据库导出到本地Oracle数据库的方法 原文:从服务器将Oracle数据库导出到本地Oracle数据库的方法 1.将服务器上的Oracle数据库导入到本地   在CMD模式下执 ...

  9. sqlite java excel,Android将Excel表数据导入SQLite数据库

    前两天接了个私活,需求方给了一个Excel表格,需要使用到里面的7000+条数据进行查询,最开始以为7000条一条条加入数据库也还好,以下是其中一部分数据: 但当我添加了20多条的时候突然发现这样的方 ...

最新文章

  1. html form通过ajax提交表单提交数据,Jquery通过Ajax方式来提交Form表单的具体实现
  2. 3.6.1 局域网的基本概念和体系结构
  3. C++及Windows异常处理(try,catch; __try,__finally; __try, __except)——一道笔试题引起的探究
  4. 亚马逊专家课 | 数据体系+用户画像+商品画像系列课(立省 299 元)
  5. 360笔试第一题----最强的不一定是最后的赢家
  6. SQL SERVER 执行计划各字段注释
  7. pymysql使用变化的变量,构造SQL语句
  8. JAVA实现可视化的xpath_【Java】爬虫基础 -- XPath 小案例
  9. Spring-boot 项目中使用 jackson 遇到的一个问题
  10. 建立一个Windows Phone 7益智游戏 附源代码
  11. Linux IO模型漫谈(4)- 非阻塞IO
  12. 《编码:隐匿在计算机软硬件背后的语言》TXT
  13. 黑马java idea (据说是完整的)网盘
  14. 基于Android平台的会议室管理系统详细设计说明书
  15. 给推荐系统加入先验知识的方法总结
  16. 嵌入式实验 之 DMA控制器实验
  17. springboot2.x 集成百度 ui-dgenerator生成分布式唯一id
  18. 傅里叶级数、狄利克雷收敛定理、周期延拓
  19. 为什么每次用计算机算数都不对,Excel算出来的数,和计算器结果对不上?
  20. ArcGIS提取斜坡单元

热门文章

  1. 科学研究的预先可再现性(Preproducibility)和可再现性(Producibility)
  2. 电脑技巧:推荐五款非常棒的小众软件,值得收藏
  3. 【软件安装】Visual Studio 2013~2019全系列离线安装包在线安装器
  4. IMP 导入数据报错 OCI-21500 OCI-22275
  5. 清理和关闭多余的Win7服务
  6. 安卓设置菊花动画_这种 “小菊花”式加载动画,会让人觉得等了很久
  7. 四川天创速盈:在拼多多开店之前,需要对用户群体进行分析
  8. android应用退出后在任务管理器隐藏
  9. 结合Excel进行数据驱动
  10. colab + cuda