Java使用easyExcel实现导入功能

 更新时间:2022年10月22日 09:38:33   作者:tianClassmate  
这篇文章介绍了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要简单一些呢?

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

相关文章

  • 解决SpringMVC接收不到ajaxPOST参数的问题

    解决SpringMVC接收不到ajaxPOST参数的问题

    今天小编就为大家分享一篇解决SpringMVC接收不到ajaxPOST参数的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 关于单例模式懒汉式和饿汉式的区别及说明

    关于单例模式懒汉式和饿汉式的区别及说明

    这篇文章主要介绍了关于单例模式懒汉式和饿汉式的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 使用Springboot对配置文件中的敏感信息加密

    使用Springboot对配置文件中的敏感信息加密

    这篇文章主要介绍了使用Springboot对配置文件中的敏感信息加密方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java删除二叉搜索树最大元素和最小元素的方法详解

    Java删除二叉搜索树最大元素和最小元素的方法详解

    这篇文章主要介绍了Java删除二叉搜索树最大元素和最小元素的方法,结合实例形式详细分析了java针对二叉搜索树的基本遍历、查找、判断、删除等相关操作技巧,需要的朋友可以参考下
    2020-03-03
  • SSM框架搭建图文教程(推荐)

    SSM框架搭建图文教程(推荐)

    下面小编就为大家带来一篇SSM框架搭建图文教程(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Springboot整合logback多节点日志文件加端口号区分的操作方法

    Springboot整合logback多节点日志文件加端口号区分的操作方法

    这篇文章主要介绍了Springboot整合logback多节点日志文件加端口号区分的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • 一文带你看懂Java8中的lambda表达式和方法引用

    一文带你看懂Java8中的lambda表达式和方法引用

    Lambda 表达式是 Java 8 引入的一项重要特性,它提供了一种简洁、清晰且灵活的语法来表示可传递的匿名函数,下面就跟随小编一起学习一下Java8中的lambda表达式和方法引用的相关知识吧
    2023-12-12
  • Java调用py或者exe文件实现Word转PDF

    Java调用py或者exe文件实现Word转PDF

    这篇文章主要为大家详细介绍了Java如何调用py或者exe文件实现Word转PDF效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解下
    2025-03-03
  • Java线程同步Lock同步锁代码示例

    Java线程同步Lock同步锁代码示例

    这篇文章主要介绍了Java线程同步Lock同步锁代码示例,首先介绍了Java线程同步的原理,然后对lock同步锁作了简要阐述,分享了代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 详解mybatis collection标签一对多的使用

    详解mybatis collection标签一对多的使用

    这篇文章主要介绍了mybatis collection标签一对多的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06

最新评论