Java使用easyExcel实现导入功能

今天带来的是esayExcel的简单使用小结,一个高效的Excel的处理框架

临时接到领导要求需要做一个Excel导入功能,于是发挥我的特长——面向百度编程。

在百度搜索了一圈都是POi导入方式,找到一个看着还算靠谱的demo,这种方式在我看来相当的笨重,读取到Excel内容后逐个进行判断。折腾了一个上午,代码像是一个年迈的老人-岿然不动,为我的菜感到汗颜。

经过公司经验丰富的老人的指导,使用阿里巴巴开源的easyExcel导入方式使用很便捷,更重要的是快,十分钟就完成了整个导入过程的开发。

书归正传,正式进入easyExcel的使用过程。

一、导入依赖

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>easyexcel</artifactId>
  <version>2.1.1</version>
</dependency>

二、编写entity类

public class MedicineBasicImport implements Serializable {

    /**
     * 药品编码
     */
    @ExcelProperty("药品编码")
    private String code;
    /**
     * 药品类型
     */
    @ExcelProperty( "药品类型")
    private String type;
     /**
     * 药品名称
     */
    @ExcelProperty("药品名称")
    private String title;

}

特别指出的是,实体属性上需要增加 @ExcelProperty注解与Excel的表头对应。

三、写操作

 @Override
    public int importBasicMedicine(MultipartFile file, Long updateSupport) {
        try {
            BufferedInputStream bufferedInputStream=new BufferedInputStream(file.getInputStream());
            EasyExcel.read(bufferedInputStream, MedicineBasicImport.class,new ImportMedicineService(updateSupport,medicineBasicMapper))
                .sheet()
                .doRead();;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return 0;
    }

调用 EasyExcel.read()方法,需要传递三个参数,1、文件流 2、实体类 3、new ImportMedicineService(updateSupport,medicineBasicMapper)处理的业务类

四、业务实现

ImportMedicineService需要我们继承 AnalysisEventListener类 并实现它的两个方法,invoke()和doAfterAllAnalysed()方法。

public class ImportMedicineService extends AnalysisEventListener<MedicineBasicImport> {
    private Long topDeptId;
    private TMedicineBasicMapper medicineBasicMapper;

    List<TMedicineBasic> list =  new ArrayList<>();

    public ImportMedicineService(Long updateSupport, TMedicineBasicMapper medicineBasicMapper) {
        topDeptId=updateSupport;
        this.medicineBasicMapper=medicineBasicMapper;
    }

    // 每读取一行就调用该方法
    @Override
    public void invoke(MedicineBasicImport data, AnalysisContext context) {

        TMedicineBasic tMedicineBasic=new TMedicineBasic();
        tMedicineBasic.setId(IdUtils.simpleUUID());
        tMedicineBasic.setTopDeptId(topDeptId);
        BeanUtils.copyProperties(data,tMedicineBasic);
        list.add(tMedicineBasic);
    }

    // 全部读取完成就调用该方法
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        medicineBasicMapper.insertList(list);
    }

当我们调用导入接口时会调用到 AnalysisEventListener 的实现类的invoke()方法,但是每读取一行都会执行invoke()方法,大部分业务场景都会把读取的内容存入到数据库中,如果读取一行就保存到数据库,这对于数据库来说简直是一个灾难。

比较好的方式就是在doAfterAllAnalysed()方法中执行数据库的操作,将多次数据库IO转为一次IO。

这种方式是不是比PIO要简单一些呢?

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • Java利用EasyExcel读取写入Excel详情

    目录 EasyExcel介绍 为什么使用EasyExcel? 封装使用 例子 EasyExcel介绍 EasyExcel是一个基于Java的.快速.简洁.解决大文件内存溢出的Excel处理工具.他能让你在不用考虑性能.内存的等因素的情况下,快速完成Excel的读.写等功能. 为什么使用EasyExcel? Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但PO

  • Java操作Excel文件解析与读写方法详解

    目录 一.概述 二.Apache POI 三.XSSF解析Excel文件 1.Workbook(Excel文件) 2.Sheet(工作簿) 3.Row(数据行) 4.Cell(单元格) 四.超大Excel文件读写 1.使用POI写入 2.使用EasyExcel 一.概述 在应用程序的开发过程中,经常需要使用 Excel 文件来进行数据的导入或导出.所以,在通过Java语言实现此 类需求的时候,往往会面临着Excel文件的解析(导入)或生成(导出). 在Java技术生态圈中,可以进行Excel文件

  • java利用easyexcel实现导入与导出功能

    目录 前言 1先添加依赖 2批量插入数据 3创建需要导出数据实体类 4创建一个类ExcelListener 5实现下载excel 6控制器添加我们的导入操作代码 7导出效果如图 8导入直接调用 前言 poi的解析方式是dom解析,把结果一次都读入内存操作,这样的操作平时是不会有问题的,但是并发量上来的时候就会出现OOM,EasyExcel,底层对象其实还是使用poi包的那一套.它只是将poi包的一部分抽了出来,摒弃掉了大部分业务相关的属性.由于它关注的业务是导入导出这一块,所以在处理大数据量的导

  • Java实现自定义Excel数据排序的方法详解

    目录 1.引入jar包 2.自定义排序 通常,我们可以在Excel中对指定列数据执行升序或者降序排序,排序时可依据单元格中的数值.单元格颜色.字体颜色或图标等.在需要自定义排序情况下,我们也可以自行根据排序需要编辑数据排列顺序.本文,将通过Java应用程序来实现如何自定义排序. 1.引入jar包 使用jar包:Spire.Xls.jar version: 12.8.4 导入方法1:手动下载jar到本地,解压,然后找到lib文件夹下的Spire.Xls.jar文件.然后在IDEA中打开“Proje

  • Java 将Excel转为UOS的操作方法

    目录 [导入jar包] [Excel转UOS] 以.uos为后缀的文件,表示Uniform Office Spreadsheet文件,是一种国产的办公文件格式,该格式以统一办公格式(UOF)创建,使用XML和压缩保存电子表格.既有的Excel表格文件,可以通过格式转换的方式转换为UOS格式,本文将对此作相关介绍. [导入jar包] 使用jar包:Spire.Xls.jar version: 12.7.4 导入方法1:手动下载 jar到本地,解压,然后找到lib文件夹下的Spire.Xls.jar

  • Java使用POI实现导出Excel的方法详解

    目录 一.前景 二.概念 2.1. 简介 2.2.Excel版本和相关对象 2.3.WorkBook 2.4.POI依赖 三.POI - 写 3.1.代码示例 3.2. 性能对比 3.3. 测试rowAccessWindowSize 3.4. 导出Excel样式设置 四.POI - 读 4.1.代码示例 4.2.读取不同的数据类型 4.3.读取公式 五.POI - 遇到的坑 一.前景 在项目开发中往往需要使用到Excel的导入和导出,导入就是从Excel中导入到DB中,而导出就是从DB中查询数据

  • Java使用easyExcel实现导入功能

    今天带来的是esayExcel的简单使用小结,一个高效的Excel的处理框架 临时接到领导要求需要做一个Excel导入功能,于是发挥我的特长——面向百度编程. 在百度搜索了一圈都是POi导入方式,找到一个看着还算靠谱的demo,这种方式在我看来相当的笨重,读取到Excel内容后逐个进行判断.折腾了一个上午,代码像是一个年迈的老人-岿然不动,为我的菜感到汗颜. 经过公司经验丰富的老人的指导,使用阿里巴巴开源的easyExcel导入方式使用很便捷,更重要的是快,十分钟就完成了整个导入过程的开发. 书

  • java使用EasyExcel导入导出excel

    一.准备工作 1.导包 <!-- poi 相关--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId

  • Java利用EasyExcel解析动态表头及导出实现过程

    目录 前言 参考地址 前端下载 模板下载 EasyExcel动态表头解析 EasyExcel动态表头导出 总结 前言 excel文件导入及导出,是日常开发中经常遇到的需求.本次笔者以EasyExcel为例,针对在项目中遇到的动态表头解析及导出的场景,详细介绍具体的代码实现过程. 参考地址 https://github.com/alibaba/easyexcel 前端下载 const download = () => { axios({ method: 'GET', url: config.htt

  • Java编程调用微信支付功能的方法详解

    本文实例讲述了Java编程调用微信支付功能的方法.分享给大家供大家参考,具体如下: 微信开发文档地址:https://mp.weixin.qq.com/wiki/home/ 从调用处开始 我的流程: 1.点击"支付"按钮,去后台 --> 2.后台生成支付所需数据返回页面 --> 3.页面点击"确认支付"调用微信支付js.完成支付功能. 支付按钮 <div class="button" id="pay" onc

  • Java实现二维码功能的实例代码

    最近突然想写一些文章,所以就陆陆续续的编写一些自我感觉有用的并且大家也可能用到的一些技术代码.方便互相学习交流. 今天这篇文章,主要是利用Java实现二维码: 在写代码之前先讲一下整体思路,以方便更好更快捷的实现功能. (1).首先要想实现二维码功能需要导入com.google.zxing的核心jar包,我这里导入的是core-3.2.1.jar; (2).所谓二维码莫过于把需要的内容放入一张图片中,所以这里首先是创建一张带有参数内容的图片,方法如下: private static Buffer

  • Java实现的百度语音识别功能示例

    本文实例讲述了Java实现的百度语音识别功能.分享给大家供大家参考,具体如下: SDK以及示例代码下载地址: http://yuyin.baidu.com/sdk 最近一直在搞java,就选择了java工程.将代码拷过去.同时复制文件"test.pcm"到工程目录下.就基本上可以了. 注:test.pcm是语音文件,可以用audacity软件打开,选择 文件->导入->裸数据. 设置采样率为8000Hz.点击播放就能听见声音了. 这个时候程序跑起来还有问题,需要将apiKe

  • 用Java编程输出万年历的功能实现

    1.功能实现 输入1查看上个月日历 输入2查看下个月日历 输入3查看去年本月日历 输入4查看明年本月日历 输入5查看指定月份日历 2.代码所导入的包 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Scan

  • Java使用easyExcel导出excel数据案例

    easyExcel简介: Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc. easyExcel是阿里巴巴开源的一个excel处理框架,以使用简单.节省内存著称. easyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理 easyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据

随机推荐