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

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

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

这个首先要导入一个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. 关于nginx rewrtie的四种flag
  2. 015_请求转发和重定向
  3. J.U.C系列(五)BlockingQueue的使用
  4. java base64转bitmap,如何将Bitmap位图与base64字符串相互转换
  5. C/C++预处理指令
  6. 只要加一行,让 IE 五倍速执行 JavaScript
  7. iphone固件降级_手机资讯:降级必备:Phone5如何下载备份SHSH文件
  8. 关于linux安装openoffice无法启动
  9. vs2015环境搭建与简单程序测试
  10. 神经网络仿真实验matlab,神经网络及其matlab实现
  11. 免费正确使用计算机ppt,计算机基础课件ppt
  12. 群辉安装linux软件下载,群晖系统Synology DSM安装ipkg包管理和套件安装方法
  13. 织梦登陆总是提示验证码错误
  14. 中职计算机vb听课记录,《高级语言程序设计VB》听课笔记:12
  15. 3dmax怎么渲染全景图,如何使用vray渲染制作360度全景图?
  16. DNX 版本升级命令
  17. 计算机语言替换,Zig 0.7.0 发布,想要替换 C的编程语言
  18. 2022年版中国腰果酚市场趋势研究与竞争策略分析报告
  19. Java中jdk1.8和jdk17相互切换
  20. Java基础篇(集合)

热门文章

  1. 【转载】Node.js 教程(菜鸟教程系列)
  2. centos 日志切割_Linux 日志切割工具cronolog详解
  3. React-Router
  4. 软件测试提测是怎样提的,软件测试质量保障之开发提测
  5. 虚拟机新加磁盘,如何在本机显示
  6. python中使用fork创建新的进程
  7. 微信小程序自定义组件传参
  8. 网传《贪玩蓝月》大规模裁员!“是兄弟就来裁我” ?
  9. 第五讲 一元函数微分学的几何应用
  10. java 时间段重叠_Java判断多个时间段是否重叠(重叠区间个数)