这篇文章介绍了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要简单一些呢?
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对编程学习网的支持。如果你想了解更多相关内容请查看下面相关链接
本文标题为:Java使用easyExcel实现导入功能
				
        
 
            
        - Java中的日期时间处理及格式化处理 2023-04-18
 - SpringBoot使用thymeleaf实现一个前端表格方法详解 2023-06-06
 - Java实现顺序表的操作详解 2023-05-19
 - Springboot整合minio实现文件服务的教程详解 2022-12-03
 - JSP页面间传值问题实例简析 2023-08-03
 - 基于Java Agent的premain方式实现方法耗时监控问题 2023-06-17
 - Spring Security权限想要细化到按钮实现示例 2023-03-07
 - JSP 制作验证码的实例详解 2023-07-30
 - 深入了解Spring的事务传播机制 2023-06-02
 - ExecutorService Callable Future多线程返回结果原理解析 2023-06-01
 
						
						
						
						
						
				
				
				
				