如何通过easyExcel在Java中实现高效的数据导入操作?

2026-05-25 23:511阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计803个文字,预计阅读时间需要4分钟。

如何通过easyExcel在Java中实现高效的数据导入操作?

今天带来的是esayExcel的简单使用小结,一个高效的Excel处理框架。若临时接到领导要求,需要做一个Excel导入功能,那么就可以发挥我的特长,面向百度的编程。

在百度搜索了一圈,发现都是POi导入方式。

今天带来的是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()方法,大部分业务场景都会把读取的内容存入到数据库中,如果读取一行就保存到数据库,这对于数据库来说简直是一个灾难。

如何通过easyExcel在Java中实现高效的数据导入操作?

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

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

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

本文共计803个文字,预计阅读时间需要4分钟。

如何通过easyExcel在Java中实现高效的数据导入操作?

今天带来的是esayExcel的简单使用小结,一个高效的Excel处理框架。若临时接到领导要求,需要做一个Excel导入功能,那么就可以发挥我的特长,面向百度的编程。

在百度搜索了一圈,发现都是POi导入方式。

今天带来的是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()方法,大部分业务场景都会把读取的内容存入到数据库中,如果读取一行就保存到数据库,这对于数据库来说简直是一个灾难。

如何通过easyExcel在Java中实现高效的数据导入操作?

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

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

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