EasyExcel的简单使用

1、特点

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

2、导入实验物品实现步骤

2.1 导入依赖

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

2.2 创建实体类

用于设置excel表头,index=0表示第一列

@Data
public class ObjectData {

    @ExcelProperty(index = 0)
    @ApiModelProperty(value = "物品名称")
    private String name;

    @ExcelProperty(index = 1)
    @ApiModelProperty(value = "厂商")
    private String manufacturer;

    @ExcelProperty(index = 2)
    @ApiModelProperty(value = "单位")
    private String unit;

    @ExcelProperty(index = 3)
    @ApiModelProperty(value = "库存")
    private String stock;

    @ExcelProperty(index = 4)
    @ApiModelProperty(value = "物品类别名称")
    private String label;

    @ExcelProperty(index = 5)
    @ApiModelProperty(value = "损坏数量")
    private String damage;

    @ExcelProperty(index = 6)
    @ApiModelProperty(value = "备注")
    private String ps;

}

2.3 创建读取的监听器

把excel的数据存放到数据库

public class ObjectExcelListener extends AnalysisEventListener<ObjectData> {

    public ObjectService objectService;

    public ObjectExcelListener(){}

    public ObjectExcelListener(ObjectService objectService){
        this.objectService=objectService;
    }

    //一行一行去读取excel内容
    @Override
    public void invoke(ObjectData objectData, AnalysisContext analysisContext) {
        if(objectData==null){
            throw new ZykException(20001,"添加失败");
        }
        Object object=new Object();
        //把第一个参数的值复制到第二个参数(springboot自带的方法)
        BeanUtils.copyProperties(objectData, object);
        objectService.save(object);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}

2.4 controller层

@ApiOperation(value = "Excel的批量导入")
@PostMapping("addObject")
public R addObject(MultipartFile file){
    //1 获取上传的excel文件 MultipartFile
    //返回错误提示信息
    objectService.importObjectData(file,objectService);
    return R.ok();
}

2.5 service层

@Service
public class ObjectServiceImpl extends ServiceImpl<ObjectMapper, Object> implements ObjectService {
    
    @Override
    public void importObjectData(MultipartFile file, ObjectService objectService) {
        try {
            InputStream inputStream = file.getInputStream();
            // 这里 需要指定读用哪个class去读以及监听器,然后读取第一个sheet 文件流会自动关闭
            EasyExcel.read(inputStream, ObjectData.class,new ObjectExcelListener(objectService)).sheet().doRead();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值